List<? super Apple> fruits = new ArrayList<Fruits >();
fruits.add(Apple或 Apple子类对象的引用); //add形参类型是Apple的的类型或是Apple的父类,所以能接收所有的Apple或 Apple子类对象的引用)
Apple aApple = fruits.get(0); //get方法返回的类型是Apple的的类型或是Apple的父类,但是具体是那个类型不确定,所以也没方法指定一个类型引用来接收它,自然编译错误
所以说<? super T>用于写入数据;
总结:
如果你想从一个数据类型里获取数据,使用 ? extends 通配符
如果你想把对象写入一个数据结构里,使用 ? super 通配符
如果你既想存,又想取,那就别用通配符。