gpt4 book ai didi

java - 在 Java 中避免 'instanceof'

转载 作者:IT老高 更新时间:2023-10-28 13:53:15 26 4
gpt4 key购买 nike

我有以下(可能是常见的)问题,这让我很困惑:

有几个生成的事件对象扩展了抽象类 Event,我想将它们划分为 session Bean,例如

public void divideEvent(Event event) {
if (event instanceof DocumentEvent) {
documentGenerator.gerenateDocument(event);
} else if (event instanceof MailEvent) {
deliveryManager.deliverMail(event);
...
}
...

}

但是将来可能会有两种以上的事件类型,所以 if-else 会很长并且可能不可读。此外,我认为 instanceof 在这种情况下并不是真正的“最佳实践”。

我可以向 Event 类型添加一个抽象方法并让它们自行划分,但随后我必须在每个实体中注入(inject)特定的 session Bean。

有什么提示可以为这个问题找到一个“漂亮”的解决方案吗?

感谢您的帮助!

最佳答案

最简单的方法是让 Event 提供一个您可以调用的方法,以便 Event 知道该做什么。

interface Event {
public void onEvent(Context context);
}

class DocumentEvent implements Event {
public void onEvent(Context context) {
context.getDocumentGenerator().gerenateDocument(this);
}
}

class MailEvent implements Event {
public void onEvent(Context context) {
context.getDeliveryManager().deliverMail(event);
}
}


class Context {
public void divideEvent(Event event) {
event.onEvent(this);
}
}

关于java - 在 Java 中避免 'instanceof',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6157835/

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