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