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

RHS*_*ger 15 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我仍然不确定我"做得对".感觉我应该能够指定集合是(Class - > FieldBinder).IDE警告返回语句的事实只会强化这种想法.

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

注意:这个问题看起来非常密切相关,但是远远不够,我无法弄清楚如何将信息应用到我自己的问题中.

Ita*_*man 15

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

小修正:

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