为什么不能将对象传递给通配符方法?

时间:2019-06-20 14:14:53

标签: java generics

给出以下代码:

interface Message {
}

interface Subscriber<T extends Message> {

  void onMessage(T message);
}

class SubscriberManager {

  Map<Class<? extends Message>, Subscriber<? extends Message>> subscribers =
    new HashMap<>();

  public void invoke(Message message) {
    Subscriber<? extends Message> subscriber = subscribers.get(message.getClass());

    subscriber.onMessage(message);
  }
}

我收到以下编译器错误:

  

不兼容的类型:无法将邮件转换为的捕获#1   扩展消息

为什么我不能将Message实例传递给onMessage方法?通配符类型参数明确指出实际参数的类型可以是Message或扩展Message的值。 我可以简单地将通用参数类型放在地图的声明中,并使用原始类型,但这会使代码在java-5.0-ish之前。

0 个答案:

没有答案