我有 2 个应用程序:application_1
和 application_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/