键入安全异构容器模式以存储项目列表

我正在尝试实现一个类型安全的异构容器来存储异构对象的列表。

我已经看到了几个类型安全的异构容器模式( 链接 )的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 entityList = entityMap.get(clazz); if(entityList == null) { entityList = new ArrayList(); entityMap.put(clazz, entityList); } entityList.add(entity); }