在Java中实例化通用对象

时间:2010-10-27 13:05:55

标签: java generics

是否可以像在以下代码片段中一样在Java中实例化通用对象?我知道在C#中它是可能的。但是,我还没有在Java中看到类似的机制。

// Let T be a generic type.
T t = new T();

2 个答案:

答案 0 :(得分:9)

不,由于类型擦除,这在Java中不起作用。到代码执行时,代码不知道T是什么。

请参阅Java Generics FAQ有关Java泛型的更多信息:) - 特别是,请参阅Type Erasure部分。

如果您需要在执行时知道T的类型,由于这个或其他原因,您可以将其存储在Class<T>中并将其带入构造函数中:

private Class<T> realTypeOfT;

public Foo(Class<T> clazz) {
  realTypeOfT = clazz;
}

然后,您可以拨打newInstance()等。

答案 1 :(得分:4)

我不敢。 Java中的泛型类型被删除 - 它们在编译时使用,但在运行时不存在(这实际上非常方便)。

您可以做的是从Class对象创建一个新实例。

Class<T> myClass;
T t = myClass.newInstance();