[英]How to create generic type?
我定义了一个这样的类:
public class MyClass<T implements MyInterface> {
public T getMy() {
return new T();
}
}
这不会编译。 我不允许创建通用类型T。
我该如何解决? 有什么好的模式可以做到这一点吗? 我可以通过使用抽象类而不是接口来解决此问题吗? 我必须使用反射吗?
您不能在此处使用implements
。
<T implements MyInterface> // can't use interface.
所以你可以在那里使用Abstract Class
<T extends MyAbstractClass>
public class MyClass<T extends MyInterface> {
T getMy(Class<T> clazz) throws InstantiationException, IllegalAccessException
{
return clazz.newInstance();
}
}
您可以通过传递实际的类类型(例如,传递给构造函数), Class<T>
并在默认构造函数确定的情况下对其调用newInstance()
来实现。 如果需要另一个构造函数,则需要使用反射API,例如,通过此类类型对象上的getDeclaredConstructors()
。
这里有几个问题。
您创建有界的泛型类型的语法不正确; 您需要使用extends
关键字。 extends
这个意义上来说, extends
关键字更通用 ,因为它用来表示泛型类型可以扩展另一个类或实现一个接口。
您不能直接实例化泛型类型。 这是一种更笨拙的方式(实际上没有反射),这是此Stack Overflow答案提供的 :
public T getInstance(Class<T> clazz) throws IllegalAccessException, InstantiationException { return clazz.newInstance(); }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.