我有这门课:
public class A<T> {
protected T something = new T();
...
}
当然 new T()
是不可能的。我可以做什么?
我不能更改调用此类的构造函数的代码,因为这是通过反射完成的。
另一个问题是如何获取泛型类的Class对象。 mymethod(A.class) 工作了,但是现在 A 得到了参数 T。
最佳答案
您可以接收 T 作为构造函数的参数:
protected T something;
public A(T something) {
this.something = something;
}
或者,如果 A 的目标是真正创建新的 T 实例,则将 T 的工厂作为参数:
protected T something;
public A(Factory<T> somethingFactory) {
this.something = somethingFactory.newInstance();
}
Class<T>
可以被视为 Factory<T>
, 因为它有一个 newInstance()
方法,调用公共(public)无参数构造函数。但是一个Factory<T>
可以使用除此构造函数之外的其他东西创建新实例。
关于java - 如何创建通用类型的新对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9397358/