我有点担心非泛型类中的泛型类型。我正在开发一个API,其中我有一个数据模型,其中有一个单例DataModelManager。这个DataModelManager创建DataFactory?扩展DMAbstractObject,其中DMAbstractObject是一个抽象类,告诉“I‘s DataModel类”。
因此,基本上,当我想要创建一个对象时,我使用以下代码:
DataModelManager.getInstance().getDataFactory(DMLine.class).newElement();线= DMLine线
问题是我正在使用这个函数
public DataFactory<? extends DMAbstractObject> getDataFactory(Class<? extends DMAbstractObject> clazz)因此,Java无法知道返回的DataFactory来自与参数clazz相同的类型。因为“扩展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捕获#2-of?)将DMAbstractObject扩展到DataFactory DMLine),但我想知道是否有适当的方法来做到这一点。
谢谢你的回答!
发布于 2014-03-31 11:40:16
public <T extends DMAbstractObject> DataFactory<T> getDataFactory(Class<T> clazz)使用泛型锁定类型。泛型可以在方法级别定义,也可以在类级别定义。
https://stackoverflow.com/questions/22760513
复制相似问题