如何使用Guava的ClassToInstanceMap <b>?</b>

时间:2012-04-20 13:01:15

标签: java guava

我尝试使用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);
}

但很自然,这两种方法都没有编译。

那么,如何正确使用它?

2 个答案:

答案 0 :(得分:2)

由于您确定oMyObject的实例,因此您不需要使用类型安全的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)