我对非泛型类中的泛型类型有点担心。我正在开发一个API,我有一个数据模型,它有一个单独的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的类型相同。因为&#34;?扩展DMAbstractObject&#34;告诉&#34;任何扩展DMAbstractObject&#34;的对象。在泛型类中,我可以使用:&#34; T扩展DMAbstractObject&#34;但不是这里
我的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捕获未经检查的强制转换#2-of?将DMAbstractObject扩展到DataFactory DMLine),但我想知道是否存在这是一个正确的方法。
感谢您的回答!
答案 0 :(得分:3)
public <T extends DMAbstractObject> DataFactory<T> getDataFactory(Class<T> clazz)
使用通用来锁定类型。泛型可以在方法级别和类级别定义。