注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

倚天剑

青春要在奔跑中度过

 
 
 

日志

 
 
 
 

Java基础八:泛型,?通配符  

2013-08-04 14:52:42|  分类: 开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
转自:http://zmx.iteye.com/blog/678412


Java代码  收藏代码
  1. /** 
  2.  * JDK1.5 泛型 
  3.  *  
  4.  * @author 张明学 
  5.  *  
  6.  */  
  7. public class GenericStudy {  
  8.   
  9.     @SuppressWarnings( { "unchecked""unused" })  
  10.     public static void main(String[] args) throws Exception {  
  11.         // 第1点:Java的泛型仅仅只是通用Java的编译器实现的,进行全安检查,编译成class文件后没有保留泛型信息  
  12.         Collection<Integer> c1 = new ArrayList<Integer>();  
  13.         Collection<String> c2 = new ArrayList<String>();  
  14.         // 1.1 获取c1与c2的字节码看是否相同  
  15.         System.out.println("c1与c2的字节码是否相同:" + (c1.getClass() == c2.getClass()));// true  
  16.         c1.add(23);  
  17.         // 1.2 通用反射我们可以向c1中添加String类型的数据(class文件没有任何泛型)  
  18.         Class clazz = c1.getClass();  
  19.         Method collAddMethod = clazz.getMethod("add", Object.class);  
  20.         collAddMethod.invoke(c1, "http://zmx.iteye.com");  
  21.         for (Object obj : c1) {  
  22.             System.out.println(obj);  
  23.         }  
  24.   
  25.         // 泛型中的?通配符:表示任何类型,它与Object是有区别的如下所示:  
  26.         // collection1可以存放任保类型,而collection2则只能放在Object类型  
  27.         Collection<?> collection1 = new ArrayList<String>();  
  28.         collection1 = new ArrayList<Integer>();  
  29.         collection1 = new ArrayList<Object>();  
  30.         Collection<Object> collection2 = new ArrayList<Object>();  
  31.         // 泛型中的向上或向下限定  
  32.         // collection3表示它可以存放Number或Number的子类  
  33.         Collection<? extends Number> collection3 = null;  
  34.         collection3 = new ArrayList<Number>();  
  35.         collection3 = new ArrayList<Double>();  
  36.         collection3 = new ArrayList<Long>();  
  37.         // collection4表示它可以存放Integer或Integer的父类  
  38.         Collection<? super Integer> collection4 = null;  
  39.         collection4 = new ArrayList<Object>();  
  40.   
  41.         // 泛型简单使用(Map.Entry是Map的一个内部类,表法Map中存在的一个对象)  
  42.         Map<String, Integer> testMap = new HashMap<String, Integer>();  
  43.         testMap.put("xiaobojava"2);  
  44.         testMap.put("mengya"3);  
  45.         testMap.put("zmx"6);  
  46.         Set<Map.Entry<String, Integer>> entrySet = testMap.entrySet();  
  47.         for (Map.Entry<String, Integer> entry : entrySet) {  
  48.             System.out.println(entry.getKey() + ":" + entry.getValue());  
  49.         }  
  50.   
  51.         // 自定义泛型  
  52.         String[] a = { "aa""bb""cc" };  
  53.         swap(a, 12);  
  54.         Integer[] b = { 324567 };  
  55.         swap(b, 12);  
  56.         // 泛型中的类型不能为基本数据类型(如下就不行)  
  57.         int[] c = { 135 };  
  58.         // swap(c,1,2);  
  59.   
  60.         Vector<Date> v1 = new Vector<Date>();  
  61.         // 由于泛型是由编译器实现的语法检查,编译成class文件后没有保留泛型信息,但可以根据Method获取  
  62.         Method applyMethod = GenericStudy.class.getMethod("applyVector",  
  63.                 Vector.class);  
  64.         // getGenericParameterTypes()按照声明顺序返回 Type 对象的数组,这些对象描述了此 Method  
  65.         // 对象所表示的方法的形参类型的。  
  66.         Type[] type = applyMethod.getGenericParameterTypes();  
  67.         // ParameterizedType extends Type  
  68.         ParameterizedType pType = (ParameterizedType) type[0];// applyVector只用一个参数  
  69.         // getRawType()返回 Type 对象,表示声明此类型的类或接口  
  70.         System.out  
  71.                 .println("getRawType()方法:表示声明此类型的类或接口是:" + pType.getRawType());  
  72.         // getActualTypeArguments()返回表示此类型实际类型参数的 Type 对象的数组。  
  73.         System.out.println("getActualTypeArguments()方法:实际类型参数的 Type 对象"  
  74.                 + pType.getActualTypeArguments()[0]);// Vector<Date>只用一个Date类型  
  75.   
  76.     }  
  77.   
  78.     public static void applyVector(Vector<Date> v1) {  
  79.   
  80.     }  
  81.   
  82.     public static void printCollection(Collection<?> collection) {  
  83.         for (Object obj : collection) {  
  84.             System.out.println(obj);  
  85.         }  
  86.     }  
  87.   
  88.     /** 
  89.      * 自定义泛型一个泛型方法 
  90.      *  
  91.      * @param <T> 
  92.      *            表示自己定义的一个泛型类型(T不能是基本数据类型) 
  93.      * @param a 
  94.      *            T类型的数组 
  95.      * @param m 
  96.      *            T类型的数组m位置 
  97.      * @param n 
  98.      *            T类型的数组n位置 
  99.      */  
  100.     public static <T> void swap(T[] a, int m, int n) {  
  101.         T temp = a[n];  
  102.         a[n] = a[m];  
  103.         a[m] = temp;  
  104.     }  
  105.   
  106.     /** 
  107.      * 将某个类型的数组元素copy到这个类型集合 
  108.      *  
  109.      * @param <T> 
  110.      *            表示自己定义的一个泛型类型(T不能是基本数据类型) 
  111.      * @param a 
  112.      *            集合 
  113.      * @param b 
  114.      *            数组 
  115.      */  
  116.     public <T> void copyArray2Collection(Collection<T> a, T[] b) {  
  117.   
  118.     }  
  119.   
  120. }  

 

Java代码  收藏代码
  1. /** 
  2.  * 泛型DAO接口 
  3.  *  
  4.  * @author 张明学 
  5.  *  
  6.  */  
  7. public interface GenericDAO<E> {  
  8.     /** 
  9.      * 持久化一个对象 
  10.      *  
  11.      * @param entity 
  12.      *            实体对象 
  13.      */  
  14.     public void save(E entity);  
  15.   
  16.     /** 
  17.      * 根据主键查询一个实体对象 
  18.      *  
  19.      * @param id 
  20.      *            主键 
  21.      * @return 
  22.      */  
  23.     public E queryByPk(Integer id);  
  24.   
  25.     /** 
  26.      * 删除一个实体对象 
  27.      *  
  28.      * @param entity 
  29.      */  
  30.     public void delete(E entity);  
  31.   
  32.     /** 
  33.      * 删除一个实体对象 
  34.      *  
  35.      * @param id 
  36.      *            主键 
  37.      */  
  38.     public void delete(Integer id);  
  39.   
  40.     /** 
  41.      * 修改一个实体对象 
  42.      *  
  43.      * @param entity 
  44.      */  
  45.     public void update(E entity);  
  46.   
  47.     /** 
  48.      * 查询一个实体对象集合 
  49.      *  
  50.      * @return 
  51.      */  
  52.     public List<E> queryList();  
  53.   
  54. }  

 

  评论这张
 
阅读(127)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017