arrays.aslist 添加派生 class java
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());
}
我可以编译这段代码并打印:
C
丁
但是在我朋友的电脑上它不会编译。
它必须处理我正在使用的 Java 版本 ?
没错。您必须在 Java 8 上编译,而您的朋友在 Java 7.
在Java7中,
返回的List
的类型
Arrays.asList(new C(), new D());
将被推断为 List<B>
和 a List<B>
cannot be assigned to a List<A>
。
在 Java8 中,使用一些更智能的泛型,编译器会为相同的表达式推断出不同的类型,List<A>
。
您可以使用显式类型参数更正 Java 7 版本
Arrays.<A>asList(new C(), new D());
所以我有这个:
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());
}
我可以编译这段代码并打印: C 丁 但是在我朋友的电脑上它不会编译。 它必须处理我正在使用的 Java 版本 ?
没错。您必须在 Java 8 上编译,而您的朋友在 Java 7.
在Java7中,
返回的List
的类型
Arrays.asList(new C(), new D());
将被推断为 List<B>
和 a List<B>
cannot be assigned to a List<A>
。
在 Java8 中,使用一些更智能的泛型,编译器会为相同的表达式推断出不同的类型,List<A>
。
您可以使用显式类型参数更正 Java 7 版本
Arrays.<A>asList(new C(), new D());