使用反射,我需要创建一个包含泛型类型的类的实例对象。
到目前为止,我一直在努力寻找解决方案。
我感谢谁能帮助我。
示例:
第一课:
package app;
public class PTRow {
}
第二类:
package app;
public class PTQuery<T extends PTRow> {
}
三级。这里的问题是:
package app;
public class PTConnection {
public PTQuery<? extends PTRow> createQuery() {
//TODO How implement this?
return null;
}
}
有可能吗?
答案 0 :(得分:0)
不,不是。
通过名为type erasure 的进程编译时,所有泛型类型都将转换为java.lang.Object
。因此,你的优秀强类型泛型都会在运行时丢失。
你需要使用良好的老式多态性和工厂模式习语。
答案 1 :(得分:0)
首先注意:在泛型类型参数中使用通配符不是方法返回类型的好习惯。您当然可以使用通配符作为参数类型。
回答你的问题:你声明的返回类型使得很难知道要生成什么样的动态类型,如果不是PTQuery类型的话。
由于这是运行时,您可以使方法通用,接受将用作通用参数的类:
public <T extends PTRow> PTQuery<T> createQuery(Class<T> ptRowType){
//And in here, all should be intuitive if you know your types...
}