簡體   English   中英

在java中實例化具有泛型類型參數的類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM