在 java 中使用泛型类型参数实例化 class

Instantiating a class with a generic type parameter in java

我正在尝试将工厂 class 写入 return 具有通用参数类型的 class 实例。我认为这可以使用反射来完成,但我对如何做感到困惑。

这是我正在尝试做的一个例子。

 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()) 将 return 一个新的 GenericObject < String >();

抱歉,post 有点乱。我希望这是有道理的。提前致谢。

特蕾西

我认为您需要以下内容:

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

用法示例:

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

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

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

由于T是擦除,所以新创建的GenericObject实例甚至没有"know"其参数T的值是什么,你可能会想要将 clazz 传递给 GenericObject

的构造函数
public class GenericObjectFactory {
    public <T> GenericObject<T> getGenericObject(Class<T> clazz){
        return new GenericObject<T>(clazz);
    }
}

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

编辑

这是用法示例:

GenericObjectFactory factory = new GenericObjectFactory();
GenericObject<String> gs = factory.getGenericObject(String.class);
GenericObject<Integer> gs = factory.getGenericObject(Integer.class);