如何创建包含泛型类型的类的实例对象(使用反射)?

时间:2016-02-04 12:26:11

标签: java

使用反射,我需要创建一个包含泛型类型的类的实例对象。

到目前为止,我一直在努力寻找解决方案。

我感谢谁能帮助我。

示例:

第一课:

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;

    }

}

有可能吗?

2 个答案:

答案 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...
}