arrays.aslist添加派生类java

时间:2015-02-01 20:07:29

标签: java arrays list version

所以我有这个:

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 d 但在我朋友的电脑上它不会编译。 它必须处理我正在使用的Java版本?

1 个答案:

答案 0 :(得分:5)

那是对的。当您的朋友使用Java 7时,您必须在Java 8上进行编译。

在Java 7中,

返回的List的类型
Arrays.asList(new C(), new D());

将推断为List<B>a List<B> cannot be assigned to a List<A>

在Java 8中,通过一些更智能的泛型,编译器会为同一个表达式List<A>推断出不同的类型。

您可以使用显式类型参数

更正Java 7版本
Arrays.<A>asList(new C(), new D());