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