java – Generic constructor(Class clazz)不支持T,其中T是另一个泛型
|
想象一下这堂课: public class ObjectCreator<T> {
private Class<T> persistentClass;
public ObjectCreator(Class<T> persistentClass) {
this.persistentClass = persistentClass;
}
public T create() {
T instance = null;
try {
instance = persistentClass.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return instance;
}
}
现在我用域对象对其进行子类化: public class PersonCreator extends ObjectCreator<Person>{
/**
* @param persistentClass
*/
public PersonCreator() {
super(Person.class);
}
}
一切都很棒…… public class MessageCreator extends ObjectCreator<Message<String>>{
/**
* @param persistentClass
*/
public MessageCreator() {
super(Message.class);
}
}
我认为这是一个很大的限制:为什么这是禁止的? 任何想法如何解决? 马西莫 解决方法试试这个:super((Class<Message<String>>) ((Object) Message.class)); //compiles with warning 如果你将基类的构造函数更改为,那将会更好 public ObjectCreator(Class<? extends T> persistentClass) 然后在derrived类中使用它: super(new Message<String>(){}.getClass()); //compiles without warning
它将在没有警告的情况下编译 编辑 根据getClass()http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#getClass()的定义 返回类<?扩展X>,其中X是调用getClass的表达式的静态类型的擦除.这意味着getClass()将返回Class<?扩展消息>对于新消息< String>()和Class<?扩展消息< String>>对于匿名类新消息< String>(){} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
