小编Tom*_*Tom的帖子

Java泛型通配符问题

在使用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)

java generics guava

14
推荐指数
1
解决办法
1355
查看次数

标签 统计

generics ×1

guava ×1

java ×1