重写抽象枚举方法
以下是有效的 Java 代码:
enum ProductType {
CASH_BONUS {
void doSomething() {}
},
CUSTOMIZABLE {
void doSomething() {}
}
abstract void doSomething()
}
但是当我尝试在 Groovy 控制台中运行它时,出现错误:
a 中不能有抽象方法 非抽象类。班级 必须声明“产品类型” 抽象或方法“void” doSomething()' 必须被实现。 位于行:-1,列:-1
a 中不能有抽象方法 非抽象类。班级 必须声明“产品类型” 抽象或方法“void” doSomething()' 不能是抽象的。 位于第 11 行,第 3 列
我似乎记得读过Groovy(尚)不支持枚举常量的重写方法,这是正确的吗?如果是,是否有一种优雅的方法来模拟这种行为?
更新
这是一个在 Groovy 1.8.0 左右修复的错误
The following is valid Java code:
enum ProductType {
CASH_BONUS {
void doSomething() {}
},
CUSTOMIZABLE {
void doSomething() {}
}
abstract void doSomething()
}
But when I try to run this in the Groovy console, I get the errors:
Can't have an abstract method in a
non-abstract class. The class
'ProductType' must be declared
abstract or the method 'void
doSomething()' must be implemented.
at line: -1, column: -1Can't have an abstract method in a
non-abstract class. The class
'ProductType' must be declared
abstract or the method 'void
doSomething()' must not be abstract.
at line: 11, column: 3
I seem to recall reading that Groovy does not (yet) support overriding methods for enum constants, is this correct, and if so, is there an elegant way to emulate this behavior?
Update
This was a bug that was fixed some time around Groovy 1.8.0
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是一个错误: http://jira.codehaus.org/browse/GROOVY-4641
你可以使抽象方法变得不抽象。抛出异常以确保您始终覆盖它,例如:
it's a bug: http://jira.codehaus.org/browse/GROOVY-4641
you can make the abstract method not abstract. throw an exception to make sure you always override it like:
在 Eclipse 中将 Groovy Compile 从 1.8 更新到 2.0 对我有用
(Eclipse 3.7)
Update the Groovy Compile from 1.8 to 2.0 in eclipse worked for me
(Eclipse 3.7)