gpt4 book ai didi

java - 如何用多态替换switch?

转载 作者:行者123 更新时间:2023-11-30 06:49:00 25 4
gpt4 key购买 nike

我有 2 个应用程序:application_1application_2

application_1 发送不同类型的消息到application_2

有几种类型。我可以声明这些类型的枚举。

enum MessageType{
TYPE_1,
TYPE_2,
...
}

在我使用的 application_2 框架中,建议我编写以下 API

public void handle(Object o){
//logic
}

我在考虑如何构建类来分别处理每条消息。

我知道我可以为所有消息声明通用类型:

abstract class AbstractMessage{
MessageType type;
Object o;
//...
}

在句柄内的application_2中我可以这样写:

MessageType mt = ((AbstractMessage) o).getType();
switch(mt){
case TYPE_1:
//handle TYPE_1
break;
case TYPE_2:
//handle TYPE_2
break;
....
}

但是这段代码看起来很难看。

请帮助找到更好的解决方案。

最佳答案

如果你想使用多态性,你可以定义abstract 消息类:

abstract class AbstractMessage { 
public abstract void doStuff();
//...
}

不使用枚举,而是为扩展抽象类并覆盖方法的每个消息类型创建一个类:

class Type1Message extends AbstractMessage {
@Override
public void doStuff() {
//handle TYPE_1
}
}

class Type2Message extends AbstractMessage {
@Override
public void doStuff() {
//handle TYPE_2
}
}

然后在您的handle 方法中:

((AbstractMessage) o).doStuff();

关于java - 如何用多态替换switch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43459907/

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