以下是我看Java核心技术卷一中泛型程序设计一章摘抄下来的。
2011--10-31
(一)泛型的局限性:
①:不能用基本数据类型实例化类型参数 eg.ArrayList<int> ---> 被转化为 ArrayList<Integer>
②:运行是类型查询只使用于原始数据类型 eg.if(a instanceof Pair<String>) 和 if(a instanceof Pair<T>) 返回是一样的
--无论何时使用instance 或涉及泛型类型的强制类型转换表达式都会看到编译器警告。
--getClass方法总是返回原始类型 eg. 对于Pair<String> p1 = … 和 Pair<Integer> p2 = … 有
if(p1.getClass() == p2.getClass()) 返回true.
③:不能抛出也不能捕获泛型类实例
④:参数化类型的数组不合法 eg. Pair<String>[] table = new Pair<String>[10] //error
⑤:不能实例化类型变量 T t = new T() // error new T[]; //error T t = T.class.newInatance(); //error
解决方法:设计这样的API
public static <T> Pair<T> makePair(Class <T> cl){
try{
return new Pair<T>(cl.newInstance,cl.newInstance);}catch(Exception e){return null;}
}
然后就可以这样调用:Pari<String> p = Pair.makePair(String.class);
⑥:泛型类的静态上下文中的类型变量无效 eg. public static T get(); // error 即使类上面有T 改为 public static <T> T get();
(二)泛型中的通配符类型
①:Pair< ? extends Employee> eg. public static void print(Pair<? extends Employee>); 这样的一个方法参数可以是
Pair<Employee> 或者 Pair<Manager> //Manager 是 Employee 的子类。
②:? extends Employee get(); 是正确的,而void set(? extends Employee) 是错误的
(三)泛型中的通配符超类型限定
①:? super Employee 即 ? 是继承Employee
②:? super Employee get(); 是错误的,返回类型不能保证,只能赋给 Object ,而void set(? extends Employee) 是正确的.
③:? 不是类型变量,eg. ? t = p.get() //error. 但是可以使用通配符捕获
public static <T> void swap( Pair<?> p){
swapHelper(p);
}
public static <T> void swapHelper(Pair<T> p){
T t = p.getFirst();
p.setFirst(p.getSecond());
p.setSecond(t);
}
swapHelper()方法中的参数T捕获了通配符。
参考 java核心技术卷一泛型程序设计
相关推荐
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...
java学习笔记,java基础知识,只用于个人学习。
java学习笔记.doc java学习笔记 java学习 学习笔记 java
良葛格的Java学习笔记~讲解得非常详细。JDK5.0的~是Java入门的不错选择。
java学习笔记java学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记...
Java学习笔记(必看经典) Java学习笔记(必看经典) Java学习笔记(必看经典)
韩顺平编写的java学习笔记(全) 包含各种java的基本语法,以及3大项目的详细设计解释以及代码
Java学习笔记 1、连接数据库步骤 2、不同数据库的驱动程序和连接字符串 3、连接数据库常见问题 4、B/S结构和C/S结构的区别 5、如何处理中文乱码问题 6、使用JavaMail发送注册验证邮件 7、不安全的用户名密码验证 8、...
林信良的《JAVA学习笔记》电子版,从作者网站中下载
在学习java过程中的笔记。
Java 学习笔记.pdf Java 学习笔记.pdf Java 学习笔记.pdf Java 学习笔记.pdf
java学习笔记
Java 学习笔记,分为7个pdf,java学习笔记书籍
Java 学习笔记,Java基础知识和常见问题解析
Java学习笔记 经典必看 很经典的总结 不可错过的 一定会有收获
达内java学习笔记全,内容非常全面,是java 学习及复习的好资料
JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记
java学习笔记,从0开始学习 java学习笔记,从0开始学习 java学习笔记,从0开始学习 java学习笔记,从0开始学习 java学习笔记,从0开始学习 java学习笔记,从0开始学习 java学习笔记,从0开始学习 java学习笔记,从0...
Java学习笔记 必看经典 pdf ,需要的下吧