我想避免创建一个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允许这样做吗?我应该如何实现这种行为?
答案 0 :(得分:3)
你错过了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;
}
}
}
现在,您可以从主代码中的doSomething()
调用enum constants
方法了
例如:
var a=Status.ACTIVE
var b=Status.INACTIVE
var c=Status.UNKNOWN
a.doSomething()
b.doSomething()
c.doSomething()
答案 1 :(得分:2)
正如你可以读到的那样
在enum consts中不允许Gosu grammar或function
以下,甚至在不允许使用consts之后使用方括号{}
。
枚举体中允许的内容:
enumBody = "{" [enumConstants] classMembers "}" .
enumConstants = enumConstant {"," enumConstant} [","] [";"] .
enumConstant = {annotation} id optionalArguments .
所以基本上在GOSU中,enum包含consts并且通常像在任何其他类中一样休息。