java - 类型安全的异构容器模式来存储项目列表

标签 java design-patterns generics

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

我见过几个类型安全的异构容器模式 (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);
    }   
}

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

非常感谢

最佳答案

问题是,什么是“unchecked cast”?

有时转换可以证明是安全的,不幸的是证明超出了 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/

相关文章:

java - 如何始终在 SWT 表中显示垂直滚动条?

c# - 单例类的几个实例

c++ - 如何结合模板方法模式和多重继承?

php - 使用单例设计模式获取数据库数据

ios - 在 swift 中无法访问泛型结构的可解码对象中的嵌套值?

java - 如果我们有 Active MQ,为什么还需要 Mule?

Java - 在没有未经检查的强制转换的情况下,混合类型容器(非泛型类)是否可能?

c# - 递归地使用泛型反射

java - Enum 实现了 Comparable<E> 为什么不实现 Comparable<Enum<E>>

java - 如何使用java程序在eclipse中附加源代码?