给出以下代码:
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之前。