我有一个模板类如下:
class MyClass<T>
{
T field;
public void myMethod()
{
field = new T(); // gives compiler error
}
}
如何在我的类中创建一个新的 T 实例?
最佳答案
类型删除后,关于 T
的所有信息是它是 Object
的某个子类吗? .您需要指定一些工厂来创建 T
的实例.
一种方法可以使用 Supplier<T>
:
class MyClass<T> {
private final Supplier<? extends T> ctor;
private T field;
MyClass(Supplier<? extends T> ctor) {
this.ctor = Objects.requireNonNull(ctor);
}
public void myMethod() {
field = ctor.get();
}
}
用法可能如下所示:
MyClass<StringBuilder> it = new MyClass<>(StringBuilder::new);
或者,您可以提供 Class<T>
对象,然后使用反射。
class MyClass<T> {
private final Constructor<? extends T> ctor;
private T field;
MyClass(Class<? extends T> impl) throws NoSuchMethodException {
this.ctor = impl.getConstructor();
}
public void myMethod() throws Exception {
field = ctor.newInstance();
}
}
关于java - 实例化类型参数的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/299998/