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

Jav*_*ero 7 java generics design-patterns

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

我已经看到了几个类型安全异构容器模式(链接)的exameples,但它们都存储了一个类型的单个对象.

我试着按如下方式实现它:

public class EntityOrganizer {  

    private Map<Class<?>, List<Object>> entityMap = new HashMap<Class<?>, List<Object>>();

    public <T> List<T> getEntities(Class<T> clazz) {
        return entityMap.containsKey(clazz) ? entityMap.get(clazz) : Collections.EMPTY_LIST;
    }

    private <T> void addEntity(Class<T> clazz, T entity) {
        List<T> entityList = (List<T>) entityMap.get(clazz);
        if(entityList == null) {
            entityList = new ArrayList<T>();
            entityMap.put(clazz, (List<Object>) entityList);
        }
        entityList.add(entity);
    }   
}
Run Code Online (Sandbox Code Playgroud)

但问题是这段代码充满了未经检查的演员阵容.有人可以帮助更好地实现这个吗?

非常感谢

irr*_*ble 7

问题是,什么是"未经检查的演员"?

有时候演员阵容是可靠的,不幸的是,证据超出了javac的能力,这只是限制了规范中列举的静态分析.但程序员比javac更聪明.

在这种情况下,我认为这些是"经过检查的演员表",并且非常适合抑制警告.

请参阅其他2个相关示例:

异构容器,用于在Java中存储通用类型的对象

Typesafe forName类加载