[英]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.