以下是有效的Java代码:
enum ProductType {
CASH_BONUS {
void doSomething() {}
},
CUSTOMIZABLE {
void doSomething() {}
}
abstract void doSomething()
}但是,当我试图在Groovy控制台中运行这个程序时,我会得到以下错误:
不能在非抽象类中有抽象方法。类'ProductType‘必须声明为抽象类,或者必须实现方法'void doSomething()’。一行:-1,栏:-1
不能在非抽象类中使用抽象方法。类'ProductType‘必须声明为抽象的,或者方法'void doSomething()’不能是抽象的。一行: 11,栏:3
我似乎还记得,Groovy不支持重写枚举常量的方法,这是正确的吗?如果是的话,是否有一种优雅的方法来模拟这种行为?
更新
这是一个修复了Groovy 1.8.0的错误
发布于 2011-05-23 22:52:06
这是个bug: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();发布于 2012-12-11 03:01:10
在eclipse中将Groovy编译从1.8更新到2.0,对我起了作用
(月食3.7)
https://stackoverflow.com/questions/6099152
复制相似问题