Java学习记录_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java学习记录

Java学习记录

 2011/11/2 8:10:32  zhenzxie  http://zhenzxie.iteye.com  我要评论(0)
  • 摘要:终于我也开始记笔记了。以下是我看Java核心技术卷一中泛型程序设计一章摘抄下来的。2011--10-31(一)泛型的局限性:①:不能用基本数据类型实例化类型参数eg.ArrayList<int>--->被转化为ArrayList<Integer>②:运行是类型查询只使用于原始数据类型eg.if(ainstanceofPair<String>)和if(ainstanceofPair<T>)返回是一样的-
  • 标签:学习 Java

终于我也开始记笔记了。????

以下是我看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核心技术卷一泛型程序设计

发表评论
用户名: 匿名