作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设我们有以下类:
interface Event {
}
@FunctionalInterface
interface EventListener<T extends Event> {
void onEvent(T event);
}
class Service {
class ServiceEvent implements Event {
}
public void onServiceEvent(ServiceEvent event) {
}
}
为什么下面的赋值编译没有任何问题:
Service service = new Service();
EventListener<ServiceEvent> listener = service::onServiceEvent;
但是这个:
Service service = new Service();
EventListener<? extends Event> anotherListener = service::onServiceEvent;
因编译错误而失败:
错误:java:不兼容的类型:无效的方法引用不兼容的类型:事件无法转换为 Service.ServiceEvent
最佳答案
public void onServiceEvent(ServiceEvent event) {}
这只接受 ServiceEvent
参数。就像:
EventListener<ServiceEvent> listener = service::onServiceEvent;
但是:
EventListener<? extends Event> anotherListener
不仅可以接受ServiceEvent
,还可以接受Event
类型的所有子类型。因此,类型不匹配
关于java - 在 Java 中,是否可以将方法引用分配给其类具有泛型类型的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45521452/
我是一名优秀的程序员,十分优秀!