Groovy 重写抽象枚举方法
以下是有效的Java代码:Groovy 重写抽象枚举方法,groovy,enums,Groovy,Enums,以下是有效的Java代码: enum ProductType { CASH_BONUS { void doSomething() {} }, CUSTOMIZABLE { void doSomething() {} } abstract void doSomething() } 但是,当我尝试在Groovy控制台中运行此操作时,会出现以下错误: 中不能有抽象方法 非抽象类。班级 必须声明“ProductType” 抽象还是方法的
enum ProductType {
CASH_BONUS {
void doSomething() {}
},
CUSTOMIZABLE {
void doSomething() {}
}
abstract void doSomething()
}
但是,当我尝试在Groovy控制台中运行此操作时,会出现以下错误:
中不能有抽象方法
非抽象类。班级
必须声明“ProductType”
抽象还是方法的无效
必须实现doSomething()。
在第:-1行,第:-1列
中不能有抽象方法
非抽象类。班级
必须声明“ProductType”
抽象还是方法的无效
doSomething()'不能是抽象的。
第11行第3列
我似乎记得读到Groovy(还)不支持枚举常量的重写方法,这是正确的吗?如果是,有没有一种优雅的方法来模拟这种行为
更新
这是一个在Groovy 1.8.0前后修复的bug,它是一个bug:
可以使抽象方法不抽象。抛出异常以确保始终覆盖它,如:
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();
在eclipse中将Groovy编译从1.8更新到2.0对我来说很有用
(Eclipse3.7)不幸的是,如果为枚举定义构造函数参数,这似乎不起作用。否则,这是一个很好的解决办法。