< ? 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);