是否可以像在以下代码片段中一样在Java中实例化通用对象?我知道在C#中它是可能的。但是,我还没有在Java中看到类似的机制。
// Let T be a generic type.
T t = new T();
答案 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();