java - 如何创建通用类型的新对象?

标签 java generics

我有这门课:

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/

相关文章:

java - 除了使用 GridBagConstraints 之外,还有更精确的方法来放置 JButton 吗?

typescript - 在 TypeScript 中使用不同泛型的列表而不丢失原始类型信息

java - 将泛型参数传递给类的方法或将方法的结果转换为给定的泛型类型?

c# - 在抽象通用测试类中定义单元测试

Java 泛型自动转换

java - 在阅读主题后异步提交消息

java - 在 java 中公开 SOAP 端点以进行文件上传

Java (1.6) 泛型通配符

java - 寻找 RandomStringUtils 的简洁替代品

java - 通用 JMS 客户端