我尝试使用Guava的ClassToInstanceMap<MyObject>
。
我想让我的客户使用方法addMyObject(MyObject)
,所以我尝试编写这些方法:
private final ClassToInstanceMap<MyObject> instances = MutableClassToInstanceMap.create();
public void addMyObject1(MyObject o) {
instances.putInstance(o.getClass(), o);
}
public <O extends MyObject> void addMyObject2(O o) {
instances.putInstance(o.getClass(), o);
}
但很自然,这两种方法都没有编译。
那么,如何正确使用它?
答案 0 :(得分:2)
由于您确定o
是MyObject
的实例,因此您不需要使用类型安全的putInstance
方法。您可以使用标准put()
:
private final ClassToInstanceMap<MyObject> instances = MutableClassToInstanceMap.create();
public void addMyObject(MyObject o) {
instances.put(o.getClass(), o);
}
ClassToInstanceMap
无论如何都会对实例的类型进行运行时检查。
那就是说,我对使用类型安全方法执行此操作的方式感兴趣。也许是一些Java泛型魔术:)
答案 1 :(得分:0)
仅为记录,您可以使用
缩小类类型o.getClass().asSubclass(MyObject.class)