【发布时间】:2015-06-09 06:08:54
【问题描述】:
B 类扩展 A 类。我们可以这样说:
A a = new B();
但是为什么我们不能使用这段代码:
List<A> listOfA = new ArrayList<B>();
当然,我们可以使用generics to avoid that error。但我的问题是关于出现该错误的原因。
【问题讨论】:
标签: java arraylist type-conversion type-mismatch
B 类扩展 A 类。我们可以这样说:
A a = new B();
但是为什么我们不能使用这段代码:
List<A> listOfA = new ArrayList<B>();
当然,我们可以使用generics to avoid that error。但我的问题是关于出现该错误的原因。
【问题讨论】:
标签: java arraylist type-conversion type-mismatch
对我来说,原因是 Java 开发人员不想重复他们在数组中犯的错误。例如,
Object x[] = new String[3];
x[0] = new Integer(0);
这段代码给出了一个运行时异常java.lang.ArrayStoreException
【讨论】:
试试这个
List<? extends A> listOfA = new ArrayList<B>();
【讨论】:
why that error occurs?
如果你能做到这一点,你就可以写
listOfA.add(new A());
将A 类型的对象插入ArrayList<B>。
【讨论】:
这里的规则很简单。List 是ArrayList 的超类型(或接口)。所以你可以安全地将ArrayList 引用分配给List 变量。但这适用于非泛型类型.List & ArrayList 就像模板,如果你以泛型方式创建它,变量声明的类型必须与你传递给实际对象类型的类型相匹配。这是泛型类型安全,所以你知道(来自编译器透视),您可以对该列表中的每个对象进行类型安全操作。
【讨论】: