gpt4 book ai didi

java协变/逆变

转载 作者:行者123 更新时间:2023-11-29 03:39:22 33 4
gpt4 key购买 nike

假设我有:

class Event {}
class DoorBell extends Event {}
class PhoneCall extends Event {}
class EventGenerator {
static Event getEvent() {
if (today.isSunday())
return new DoorBell()
else
return new PhoneCall();
}
}
class EventHandler {
void HandleEvent(DoorBell doorBell) { answer door; }
void HandleEvent(PhoneCall phoneCall) { answer phone; }
void consumeEvent() {
Event e = EventGenerator.getEvent();
HandleEvent(e);
}
}

HandleEvent(e) 无法编译,因为 HandleEvent(Event) 未定义。有解决办法吗?或者我必须问 e 这是什么类型的事件?

最佳答案

通常的习惯用法是传递一个事件,让多态性为您处理所有事情。

如果没有任何行为,我认为您的 EventHandler 类没有任何值(value)。您的设计,正如所提出的那样,没有提供多态性的好处。这就是您必须检查类型的原因。最好有这样的东西:

public interface EventHandler {
void handle(Event event);
}

Visitor pattern (又名“双重 dispatch ”)可能是处理这种情况的好方法。

或者你可以试试泛型:

public class EventHandler {
public <T> void consumeEvent(T event) {
// handler code here, dependent on T
}
}

不知道 JDK 7 有没有新东西可以帮到你。对不起;我仍然停留在 JDK 6 上。

关于java协变/逆变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13902043/

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