键入安全异构容器模式以存储项目列表
我正在尝试实现一个类型安全的异构容器来存储异构对象的列表。
我已经看到了几个类型安全的异构容器模式( 链接 )的exameples,但它们都存储了一个类型的单个对象。
我试着按如下方式实现它:
public class EntityOrganizer { private Map<Class, List> entityMap = new HashMap<Class, List>(); public List getEntities(Class clazz) { return entityMap.containsKey(clazz) ? entityMap.get(clazz) : Collections.EMPTY_LIST; } private void addEntity(Class clazz, T entity) { List entityList = (List) entityMap.get(clazz); if(entityList == null) { entityList = new ArrayList(); entityMap.put(clazz, (List) entityList); } entityList.add(entity); } }
但问题是这段代码充满了未经检查的强制转换。 有人可以帮助更好地实现这个吗?
非常感谢
问题是,什么是“未经检查的演员”?
有时候演员阵容可以certificate是安全的,不幸的是,证据超出了javac的能力,这仅仅限制了规范中列举的静态分析。 但程序员比javac更聪明。
在这种情况下,我认为这些是“经过检查的演员表”,并且非常适合抑制警告。
请参阅其他2个相关示例:
异构容器,用于在Java中存储通用类型的对象
Typesafe forName类加载
你不必演员:
(List
。) entityMap.get(clazz)
当你说
entityMap.get(clazz)
你实际上有一个List
,足以满足你的需求。
同样的
entityList = new ArrayList
();
你应该只使用entityList = new ArrayList
方法声明确保您的类型安全
void addEntity(Class clazz, T entity) {
以及使用Map作为关键类。
所以代码应如下所示:
private void addEntity(Class clazz, T entity) { List