泛型小记-----牢骚宣泄

2018-06-05  本文已影响0人  关月003

< ? extends T>
< ? super T>

参数化类型,存储,纯字面意思!什么破上界、下界无语。

关于add()、get()受限,理解。

参数化类型T 

堪比绕口令

< ? extends Fruit>  参数化类型为Fruit及其子类之一。。。。。。编译器也仅知道可以放入Fruit或是其子类,但是无法确定具体类型是Fruit或Apple或Pear,因此add()方法受限!!!

get()取出时,赋值给Fruit    √

反之< ? super Fruit>  参数化类型为Fruit及其父类之一。此时get()方法获取时,无法预知类型,可以按Object获取,但是毫无用处!!!

add()放入时,由于参数化类型为Fruit或其父类之一,因而可以直接放入Fruit或其子类。


反射绕过编译器泛型检查

List<? extends Integer> list = new ArrayList<Integer>(); 
Method method =  list.getClass().getMethod("add",Integer.class); 
method.invoke(list,5);  //    list.add(5); 
Integer a =  list.get(0); 
System.out.println(a);

摘自https://blog.csdn.net/atares0223/article/details/52469672

上一篇下一篇

猜你喜欢

热点阅读