我以为我已经用super
. 但我一定是完全错误的:
用这个简单的例子:
class Animal{}
class Dog extends Animal{}
这段代码运行良好,因为我们传入了一个 Dog 的超类:
static void addThis(ArrayList<? super Dog> a) {
a.add(new Dog());
}
...
ArrayList<Animal> dogs=new ArrayList();
addThis(dogs);
但是,我不明白的是我认为这是同一件事:
ArrayList<? super Dog> dogs2=new ArrayList();
dogs2.add(new Animal());
但它无法编译。两者有什么区别?
顺便说一句,我想偷偷问另一个问题。有没有区别
// This...
ArrayList<Animal> dogs=new ArrayList();
// ... and this?
ArrayList<Animal> dogs=new ArrayList<Animal>();
鉴于类型擦除在编译时将其删除,我认为这与编译器检查引用类型是一样的。它是否正确?