在使用Google Guava优秀的Multimap时,我遇到了Generics的一些问题.我有一个类型Handler定义为这样
public interface Handler<T extends Serializable> {
void handle(T t);
}
Run Code Online (Sandbox Code Playgroud)
在另一个类中,我定义了一个将String映射到Handlers集合的多图.
private Multimap<String, Handler<? extends Serializable>> multimap =
ArrayListMultimap.create();
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试使用multimap时,我遇到了编译器错误.我的第一次尝试看起来像这样:
public <T extends Serializable> void doStuff1(String s, T t) {
Collection<Handler<T>> collection = multimap.get(s);
for (Handler<T> handler : collection) {
handler.handle(t);
}
}
Run Code Online (Sandbox Code Playgroud)
这导致以下错误.
Type mismatch: cannot convert from Collection<Handler<? extends Serializable>>
to Collection<Handler<T>>
之后,我试着像这样编码
public void doStuff2(String s, Serializable serializable) {
Collection<Handler<? extends Serializable>> collection = multimap.get(s);
for (Handler<? extends Serializable> handler : collection) {
handler.handle(serializable);
} …Run Code Online (Sandbox Code Playgroud)