依据替换原则(substitution principle),父类引用变量可指向子类对象。 B是A的子类,所以ArrayList<A>是ArrayList<? super B>的子类,并且"ArrayList<? super B> list=new ArrayList<A>();"编译通过。 对于方法add(? super B),请问什么才是类型"? super B"的子类。 小弟是泛型初学者,还请多多指教。谢谢!
ArrayList<A>和ArrayList<? super B>之间没有继承关系,ArrayList<? super B> list=new ArrayList<A>(); 编译通过是因为泛型的语法就是这样支持的,<? super B> 表示“B的某种父类型”, 在无法确定“某种”究竟是“哪种”的情况下, 可以确定是<? super B>的“子类型”的只有 B 和 B的子类型(“子类型”加引号,准确的说法是“符合条件的类型”)
多说一句,<? super B> 表示“B的某种父类型”, 同理,在无法确定“某种”究竟是“哪种”的情况下, 可以确定是<? super B>的“父类型”的只有Object,所以当你调用 list2 的 get(int) 方法的时候,返回值只能用 Object 来接
依据替换原则(substitution principle),父类引用变量可指向子类对象。
B是A的子类,所以ArrayList<A>是ArrayList<? super B>的子类,并且"ArrayList<? super B> list=new ArrayList<A>();"编译通过。
对于方法add(? super B),请问什么才是类型"? super B"的子类。
小弟是泛型初学者,还请多多指教。谢谢!
ArrayList<A>和ArrayList<? super B>之间没有继承关系,ArrayList<? super B> list=new ArrayList<A>(); 编译通过是因为泛型的语法就是这样支持的,<? super B> 表示“B的某种父类型”,
在无法确定“某种”究竟是“哪种”的情况下,
可以确定是<? super B>的“子类型”的只有 B 和 B的子类型(“子类型”加引号,准确的说法是“符合条件的类型”)
同理,在无法确定“某种”究竟是“哪种”的情况下,
可以确定是<? super B>的“父类型”的只有Object,所以当你调用 list2 的 get(int) 方法的时候,返回值只能用 Object 来接
非常感谢raistlic的详细解答。