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

我已经看到了几个类型安全的异类容器模式(link)的示例,但是它们全部都存储一个类型的单个对象。

我试图实现它如下:

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);
    }
}

但是问题是此代码充满了未经检查的强制转换。有人可以提供更好的方法来实现这一点吗?

非常感谢

最佳答案

问题是,什么是“未经检查的类型转换”?

有时候,强制转换是安全的,不幸的是,证明超出了javac的能力,而javac的能力仅是规范中列举的有限静态分析。但是程序员比javac聪明。

在这种情况下,我认为这些是“已检查的强制转换”,因此抑制警告非常合适。

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

Heterogeneous container to store genericly typed objects in Java

Typesafe forName class loading

关于java - 键入安全的异构容器模式以存储项目列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6541656/

10-12 06:15