泛型通配符的使用及类型限定上限
package frank; import java.lang.*; import java.util.List; import java.util.ArrayList; /** * 泛型通配符的使用及类型限定上限 * */ public class App { public static void main(String[] args)throws Exception { List<B> b2 = new ArrayList<B>(); B b = new B(); b2.add(b); b.get(b2); } } abstract class A { public abstract void add(); protected int age = 10; } class B extends A { @Override public void add() { } /* public void get(List<?> a)//使用通配符,及所有类型 { for(Object item : a) { System.out.println(((A)item).age);//这样子代码变得有些臃肿。 } } */ /* public void get(List<A> a)//如果传List<B>进来也会报错,其实List<B>并不是List<A>的子类了。 { for(A item : a) { System.out.println(item.age);// } } */ public void get(List<? extends A> a)//通过通配符限定,可以传进来的是任意子类 {
//我们也不能对a对象里面添加元素,因为我们不知道他是哪个子类。 for(A item : a) { System.out.println(item.age);// } } }