gpt4 book ai didi

java - Java 中的多态调度

转载 作者:搜寻专家 更新时间:2023-10-30 19:57:33 25 4
gpt4 key购买 nike

在下文中,我希望 EventHandler 以一种方式处理 EventA,以另一种方式处理 EventB,并以另一种方式处理任何其他事件(EventC、EventD)。 EventReceiver 仅接收对 Event 的引用并调用 EventHandler.handle()。当然,总是被调用的版本是 EventHandler.handle(Event event)。

在不使用 instanceOf 的情况下,有没有办法以多态方式分派(dispatch)(可能通过 EventHandler 或泛型中的其他方法)到适当的句柄方法?

class EventA extends Event {
}

class EventB extends Event {
}

class EventC extends Event {
}

class EventD extends Event {
}

class EventHandler {
void handle(EventA event) {
System.out.println("Handling EventA");
}

void handle(EventB event) {
System.out.println("Handling EventB");
}

void handle(Event event) {
System.out.println("Handling Event");
}
}

class EventReceiver {
private EventHandler handler;

void receive(Event event) {
handler.handle(event);
}
}

最佳答案

听起来像是应用(变体)Visitor pattern 的案例. (在 C++、C# 和 Java 等主流 OO 语言中,方法是单分派(dispatch),即一次只能在一种类型上进行多态。Visitor 允许一个人实现双分派(dispatch).)

然而,这要求您也能够修改 Event 类,并创建从 EventEventHandler(的基本接口(interface))的依赖项

class EventA extends Event {
public handleBy(EventHandler eh) {
eh.handleEventA(this);
}
}

class EventB extends Event {
public handleBy(EventHandler eh) {
eh.handleEventB(this);
}
}

class EventHandler {
void handleEventA(EventA event) {
System.out.println("Handling EventA");
}

void handleEventB(EventB event) {
System.out.println("Handling EventB");
}

void handle(Event event) {
event.handleBy(this);
}
}

关于java - Java 中的多态调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4737350/

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