[英]Instantiating a class with a generic type parameter in java
我正在嘗試編寫一個工廠類來返回具有泛型參數類型的類的實例。 我認為這可以通過反射來完成,但我對如何做到很困惑。
這是我想要做的一個例子。
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 <String>();
對不起,這篇文章有點rambly。 我希望這是有道理的。 提前致謝。
特蕾西
我認為你需要以下內容:
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
實例甚至不“知道”其參數T
的值是什么,您可能希望將clazz
傳遞給GenericObject
構造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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.