【发布时间】:2014-03-31 11:34:52
【问题描述】:
我有点担心非泛型类中的泛型类型。我正在开发一个 API,其中我有一个数据模型,它有一个单例 DataModelManager。这个 DataModelManager 创建 DataFactory ?扩展 DMAbstractObject,其中 DMAbstractObject 是一个抽象类,告诉“我是一个 DataModel 类”。
所以基本上,当我想创建一个对象时,我使用这个代码:
DMLine 线 = DataModelManager.getInstance().getDataFactory(DMLine.class).newElement();
问题是我正在使用函数
public DataFactory<? extends DMAbstractObject> getDataFactory(Class<? extends DMAbstractObject> clazz)
所以 Java 无法知道我返回的 DataFactory 与我的参数 clazz 的类型相同。因为“?扩展 DMAbstractObject”告诉“任何扩展 DMAbstractObject 的对象”。在一个通用类中,我可以使用:“T extends DMAbstractObject”,但不是在这里。
我的数据模型管理器: 公共类 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),但我想知道是否有适当的方法来执行此操作。
感谢您的回答!
【问题讨论】: