在 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);
我正在尝试将工厂 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);