java - 具有相关类型的通用键/值的通用映射

标签 java generics collections

我正在尝试创建一个通用类型,它保留已创建的自身版本的映射以供以后使用。实际上,这是一种单例模式,其中每种类型有一个实例。到目前为止我的代码是:

public class FieldBinder<T> {
    static final Map<Class<? extends Object>,FieldBinder<? extends Object>> instanceMap = 
        new HashMap<Class<? extends Object>,FieldBinder<? extends Object>>();

    private FieldBinder() {}

    synchronized public static <V extends Object> FieldBinder<V> getInstance(Class<V> klass) {
        if(!instanceMap.containsKey(klass)) {
            instanceMap.put(klass, new FieldBinder<V>());
        }
        return (FieldBinder<V>)instanceMap.get(klass);
    }
}

但是,我仍然不确定我是否“做对了”。感觉应该可以指定集合是(Class -> FieldBinder)。 IDE 对 return 语句发出警告这一事实只会强化这种想法。

有没有更好的方法来处理这个问题?

备注:This question似乎非常密切相关,但距离太远以至于我无法弄清楚如何将其中的信息应用到我自己的问题上。

最佳答案

您的实现是正确的。没有“更好”的方法(如果代码中有这样的东西“更好”,这是另一个问题..)

小修复:

  • <V extends Object>相当于V哪个不那么冗长
  • Class<? extends Object>相当于Class<?>哪个不那么冗长
  • 您可以使用 @SuppressWarnings("unchecked")注释告诉你的编译器转换是安全的

关于java - 具有相关类型的通用键/值的通用映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2208317/

相关文章:

java - 最终不可修改的集合线程安全吗?

java - 我应该关闭每个方法与 JDBC 的连接吗?

java - 如何按类别过滤列表?

java - 使用 Guava 从列表中删除重复项

java - 通过 Jackson 反序列化通用对象时出错

scala - 函数式根据 Scala 中的值创建列表

java - List Iterator的add()方法对迭代器做了什么?

java - Spring MVC 表单操作未映射到 Controller

java - 为什么对于阵列/堆栈/队列和其他数据结构,Big O标记中没有最好的情况?

c# - 如何按对象中的属性对 List<T> 进行排序