gpt4 book ai didi

enums - 在 Gosu 中使用枚举代替 switch case

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

我想避免创建 switch case,而是使用 enum,但在编写以下代码时,我收到编译错误,提示 unexpected token public:

public enum Status {
INACTIVE {
public void doSomething() {
//do something
}
},
ACTIVE {
public void doSomething() {
//do something else
}
},
UNKNOWN {
public void doSomething() {
//do something totally different
}
};

public abstract void doSomething()
}

基本上我想要实现的目标与此类似:

public enum Status {
ACTIVE,
INACTIVE,
UNKNOWN;
}

switch (getState()) {
case INACTIVE:
//do something
break;
case ACTIVE:
//do something else
break;
case UNKNOWN:
//do something totally different
break;
}

这在Gosu允许吗?我应该如何实现这样的行为?

最佳答案

您误解了Enum的概念。首先,enum继承自java.lang.Enum。不允许将内部类实现为Enum 常量。您必须将 ACTIVE、INACTIVE 和 UNKNOWN(枚举常量)视为类类型状态的对象
证明:
Status.ACTIVE.getClass() == 类状态
Status.ACTIVE实例状态 == true
Status.ACTIVE instanceof java.lang.Enum == true

如果您想避免在主代码中使用 switch 语句,可以将 switch 移至 enum 的实现中,如下所示; (用 Gosu 编码)

enum Status {
ACTIVE,INACTIVE,UNKNOWN;

public function doSomething(){
switch (this) {
case INACTIVE:
//do something
break;
case ACTIVE:
//do something
break;
case UNKNOWN:
//do something
break;
}
}
}

现在您可以从主代码中的枚举常量调用doSomething()方法
示例:

var a=Status.ACTIVE
var b=Status.INACTIVE
var c=Status.UNKNOWN
a.doSomething()
b.doSomething()
c.doSomething()

关于enums - 在 Gosu 中使用枚举代替 switch case,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50276798/

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