我们有以下代码:
class MyClass<T>{
public void method(){
List<T>= new ArrayList<T>();
}
}
下面的理由正确吗?我们正在尝试从非静态方法实例化类型参数ArrayList<T>
在哪里。的特定实例中的需求。对于实例化编译器必须明确知道类型。据我了解,编译器在已知的非静态上下文中标记类型参数,因此我们可以实例化。T
method
MyClass<T>
MyClass<T>
T
T
ArrayList<T>
但是如果我们编写如下代码:
class MyClass<T>{
public void method(){
List<T>= new ArrayList<T>();
new T();// Compile Error
}
}
我们有一个编译错误。我知道我们可以应用抽象工厂模式或使用反射来满足这种需求。但是new
运算符需要特定的类型。类型参数T
在非静态上下文中是特定的。我在哪里推理错误?