在 Gosu 中使用枚举而不是 switch case
Using an enum instead of a switch case in Gosu
我想避免创建 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 constants
。您必须将 ACTIVE、INACTIVE 和 UNKNOWN (Enum constants
) 视为 objects
的 class type
状态。
证明:
Status.ACTIVE.getClass()
== class Status
Status.ACTIVE instanceof Status
== 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;
}
}
}
现在您可以在主代码中从 enum constants
调用 doSomething()
方法
示例:
var a=Status.ACTIVE
var b=Status.INACTIVE
var c=Status.UNKNOWN
a.doSomething()
b.doSomething()
c.doSomething()
如您所见
Gosu grammar 或以下 function
不允许出现在枚举常量中,甚至不允许出现常量之后的括号 {}
。
枚举正文中允许的内容:
enumBody = "{" [enumConstants] classMembers "}" .
enumConstants = enumConstant {"," enumConstant} [","] [";"] .
enumConstant = {annotation} id optionalArguments .
所以基本上在 GOSU 枚举中包含 consts 并且通常像在任何其他 class 中一样休息
我想避免创建 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 constants
。您必须将 ACTIVE、INACTIVE 和 UNKNOWN (Enum constants
) 视为 objects
的 class type
状态。
证明:
Status.ACTIVE.getClass()
== class Status
Status.ACTIVE instanceof Status
== 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;
}
}
}
现在您可以在主代码中从 enum constants
调用 doSomething()
方法
示例:
var a=Status.ACTIVE
var b=Status.INACTIVE
var c=Status.UNKNOWN
a.doSomething()
b.doSomething()
c.doSomething()
如您所见
Gosu grammar 或以下 function
不允许出现在枚举常量中,甚至不允许出现常量之后的括号 {}
。
枚举正文中允许的内容:
enumBody = "{" [enumConstants] classMembers "}" .
enumConstants = enumConstant {"," enumConstant} [","] [";"] .
enumConstant = {annotation} id optionalArguments .
所以基本上在 GOSU 枚举中包含 consts 并且通常像在任何其他 class 中一样休息