在java中实例化具有泛型类型参数的类

时间:2015-02-17 12:32:28

标签: java generics reflection

我正在尝试编写一个工厂类来返回具有泛型参数类型的类的实例。我认为这可以使用反射来完成,但我对如何使用感到困惑。

这是我想要做的一个例子。

 public class GenericObjectFactory {

 public GenericObject<?> getGenericObject(Class clazz){
 // I want to return a new instance here of the generic object with type parameter clazz. So something like this...
 return new GenericObject<clazz>();

}

任何人都知道它是如何完成的?

我知道我可以用newInstance实例化clazz,但我想要GenericObject。      即getGenericObject(string.getClass())将返回一个新的GenericObject&lt;字符串&gt;();

对不起,这篇文章有点rambly。我希望这是有道理的。提前致谢。

特蕾西

2 个答案:

答案 0 :(得分:0)

我认为您需要以下内容:

public <T> GenericObject<T> getGenericObject(){
    return new GenericObject<T>();
}

使用示例:

GenericObject<String> obj = genericObjectFactory.getGenericObject();

答案 1 :(得分:0)

针对您的问题的典型明确解决方案如下:

public class GenericObjectFactory {
    public <T> GenericObject<T> getGenericObject(Class<T> clazz){
        return new GenericObject<T>();
    }
}

由于T是擦除,因此新创建的GenericObject实例甚至不“知道”其参数T的值是什么,您可能希望传递{ {1}}到clazz

的构造函数
GenericObject

显然你必须定义这样的构造函数。

修改

以下是用法示例:

public class GenericObjectFactory {
    public <T> GenericObject<T> getGenericObject(Class<T> clazz){
        return new GenericObject<T>(clazz);
    }
}