gpt4 book ai didi

java - 使用 enum 处理整数事件类型

转载 作者:行者123 更新时间:2023-12-02 02:36:36 25 4
gpt4 key购买 nike

我对 Java 还很陌生,并且正在尝试实现最佳实践。我有一个类想要大量重构。我四处搜寻,找不到任何能特别解决我的问题的内容。

我有一个名为 Definitions 的类,它将所有事件名称映射到各自的事件 ID。我有另一个类可以解析事件,称为 EventHandlerEventHandler 有一个已经变得非常大的 switch 语句。我想减少处理程序方法的大小,以便代码更易于阅读。

还有大约 50 个其他事件,我从下面截断了。每种情况大约有 20-30 行代码。你可以想象这个 switch 语句有多大。

我的定义类:

public class Definitions
{
public static class EVENT
{
public static final int SEQUENCE_START = 10;
public static final int SEQUENCE_HALT = 11;
public static final int SEQUENCE_AUTHORIZED = 12;
}
}

我的EventHandler类:

public handledStack parse(IRPEventType buffer)
{
final int eventId = Integer.parseInt(buffer.reader().parse("EventID"));


switch (eventId)
{
case Definitions.EVENT.SEQUENCE_START:
{
// stuff happens here
break;
}

case Definitions.EVENT.SEQUENCE_HALT:
{
// stuff happens here
break;
}
case Definitions.EVENT.SEQUENCE_AUTHORIZED:
{
// stuff happens here
break;
}
}
}

最佳答案

我更喜欢使用枚举的策略模式实现。查看Strategy pattern using Enums. Need a simple example in Java

interface Strategy {
void execute(Object param);
}

enum EVENT implements Strategy {
SEQUENCE_START(10) {
@Override
public void execute(Object param) {
// stuff happens here
}
},
SEQUENCE_HALT(11) {
@Override
public void execute(Object param) {
// stuff happens here
}
},
SEQUENCE_AUTHORIZED(12) {
@Override
public void execute (Object param){
// stuff happens here
}
};

private final int id;

EVENT(int id) {
this.id = id;
}

public int getId() {
return id;
}
}

public class Test {

public void handledStack parse(IRPEventType buffer) {
final int eventId = Integer.parseInt(buffer.reader().parse("EventID"));
for (EVENT event : EVENT.values()) {
if (event.getId() == eventId) {
event.execute(param);
break;
}
}
}
}

关于java - 使用 enum 处理整数事件类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46221630/

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