簡體   English   中英

Java通用類和非通用類

[英]Java generic classes and non-generic class

我對非泛型類中的泛型類型有點擔心。 我正在使用我有一個數據模型的API,其中有一個Singleton DataModelManager。 這個DataModelManager創建DataFactory嗎? 擴展了DMAbstractObject,其中DMAbstractObject是一個抽象類,告訴“我是DataModel類”。

所以基本上,當我想創建一個對象時,我使用以下代碼:

DMLine line = DataModelManager.getInstance()。getDataFactory(DMLine.class).newElement();

問題是我正在使用該功能

public DataFactory<? extends DMAbstractObject> getDataFactory(Class<? extends DMAbstractObject> clazz)

因此,Java無法知道我返回的DataFactory來自與我的參數clazz相同的類型。 因為“?extended DMAbstractObject”告訴“任何擴展DMAbstractObject的對象”。 在通用類中,我可以使用:“ T擴展DMAbstractObject”,但此處不行。

我的DataModelManager:公共類DataModelManager {

     private static DataModelManager INSTANCE;

     public static DataModelManager getInstance(){
        if(INSTANCE == null)
            INSTANCE = new DataModelManager();
        return INSTANCE;
     }  


     private HashMap<Class<? extends DMAbstractObject>, DataFactory<? extends DMAbstractObject>> dataListMap;

      /**
      * Constructor
     */
     private DataModelManager(){
        dataListMap = new HashMap<Class<? extends DMAbstractObject>, DataFactory<? extends DMAbstractObject>>();

     }

     public DataFactory<? extends DMAbstractObject> getDataFactory(Class<? extends DMAbstractObject> clazz){

         if(!dataListMap.containsKey(clazz)){
            DataFactory<? extends DMAbstractObject> dataList = new DataFactory<>(clazz);
            dataListMap.put(clazz, dataList);
            return dataList;
         }

         return dataListMap.get(clazz);


     }
 }

這不是主要問題,因為它僅會引起類型安全警告(從DataFactory capture#2-of的未經檢查的強制轉換將DMAbstractObject擴展到DataFactory DMLine),但是我想知道是否有適當的方法來執行此操作。

感謝您的回答!

public <T extends DMAbstractObject> DataFactory<T> getDataFactory(Class<T> clazz)

使用泛型來鎖定類型。 泛型可以在方法級別以及類級別定義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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