实例化一个通用类

时间:2013-09-28 19:21:29

标签: java generics compiler-errors instance

代码:

class MyClass<T>{
    public void method(){
        new ArrayList<T>();//OK- Why?
    }
}

为什么在这种情况下我们没有编译错误。类型T在编译时与特定类型不匹配。

3 个答案:

答案 0 :(得分:3)

创建MyClass的实例时,您必须提供类型T。因此,当调用method时,类型T将绑定到T构造中定义的MyClass类型。

答案 1 :(得分:1)

从技术上讲,Java编译器不需要知道生成代码的确切类型。它在称为擦除的过程中将所有泛型类型转换为Object。

当然,在编译时它会检查程序是否“类型正确”。在这种情况下,因为T只是在构造时给予类的参数。因此,当您致电new ArrayList<T>时,类型ArrayList<T>已定义,因为类型T被视为已知。

答案 2 :(得分:0)

您要实例化ArrayList,而不是T。 Javac可以知道ArrayList在编译时没有参数的默认构造函数,所以没有问题。