[英]arrays.aslist adding derived class java
所以我有这个:
class A{}
class B extends A {}
class C extends B {
public String toString(){ return new String("C"); }
}
class D extends B {
public String toString(){ return "D"; }
}
然后在主要
List<A> list = Arrays.asList(new C(), new D());
for (A a : list) {
System.out.println(a.toString());
}
我可以编译此代码,然后将其打印:CD,但在我朋友的计算机上将无法编译。 它必须处理我正在使用的Java版本吗?
那就对了。 您的朋友使用Java 7时,您必须使用Java 8进行编译。
在Java 7中,由返回的List
的类型
Arrays.asList(new C(), new D());
将被推断为List<B>
并且List<B>
无法分配给List<A>
。
在Java 8中,使用一些更聪明的泛型,编译器将为同一表达式List<A>
推断不同的类型。
您可以使用显式类型参数更正Java 7版本
Arrays.<A>asList(new C(), new D());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.