gpt4 book ai didi

java - 在 Java 中,是否可以将方法引用分配给其类具有泛型类型的变量?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:31:28 24 4
gpt4 key购买 nike

假设我们有以下类:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com