我已经定义了这样一个类:
public class MyClass<T implements MyInterface> {
public T getMy() {
return new T();
}
}
Run Code Online (Sandbox Code Playgroud)
这不会编译.我不允许创建通用类型T.
我怎么解决这个问题?这有什么好的模式吗?我可以通过使用抽象类而不是接口来解决这个问题吗?我必须使用反射吗?
您可以通过传递实际的类类型(例如,传递给构造函数)Class<T>并newInstance()在默认构造函数适合您的情况下调用它来实现此目的。如果您需要另一个构造函数,您将需要使用反射 API,例如通过getDeclaredConstructors()这个类类型对象。