以下是有效的Java代码:
enum ProductType {
CASH_BONUS {
void doSomething() {}
},
CUSTOMIZABLE {
void doSomething() {}
}
abstract void doSomething()
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在Groovy控制台中运行它时,我得到错误:
在非抽象类中不能有抽象方法.必须将类"ProductType"声明为abstract或必须实现方法"void doSomething()".at line:-1,column:-1
在非抽象类中不能有抽象方法.必须将类"ProductType"声明为abstract,否则方法"void doSomething()"必须不是抽象的.在行:11,列:3
我似乎记得读过Groovy(尚未)支持枚举常量的重写方法,这是正确的,如果是这样,是否有一种优雅的方式来模拟这种行为?
这是一个围绕Groovy 1.8.0修复的错误
这是一个错误:http ://jira.codehaus.org/browse/GROOVY-4641
你可以使抽象方法变得不抽象。抛出异常以确保您始终覆盖它,例如:
enum ProductType {
CASH_BONUS(1) {
void doSomething() {
}
},
CUSTOMIZABLE(2) {
void doSomething() {
}
};
ProductType(int n) {
this.n=n;
}
final int n;
void doSomething() {
throw new UnsupportedOperationException()
}
}
ProductType.CASH_BONUS.doSomething();
ProductType.CUSTOMIZABLE.doSomething();
Run Code Online (Sandbox Code Playgroud)