我开发了一个类,它有一些方法来增强Integer,它主要让我做到这一点:
def total = 100.dollars + 50.euros现在我必须扩展Integer.metaClass,如下所示:
Integer.metaClass.getDollars = {->
Money.Dollar(delegate)
}我试着把它放在文件的底部,放在Money类声明之前,但是编译器说已经存在一个名为Money的类,我知道为什么会这样(因为groovy创建了一个带有空静态void main的文件名的类来运行这段代码)。
我还尝试在类中使用静态块,如下所示:
static {
Integer.metaClass.getDollars = {->
Money.Dollar(delegate)
}
}这两种方法都不起作用。
第三种解决方案是更改文件名(如MoneyClass.groovy),并保留类名(类货币),但这似乎有点奇怪。
还有什么我能做的吗?谢谢。
发布于 2009-04-24 21:08:00
只需将其放入任何类的任何方法中,可能是bean TypeEnhancer.groovy:
public class TypeEnhancer {
public void start() {
Integer.metaClass.getDollars() = {-> Money.Dollar(delegate) }
}
public void stop() {
Integer.metaClass = null
}
}只需通过调用start():new TypeEnhancer().start();来创建和初始化。要禁用增强功能,请调用new TypeEnhancer().stop();。bean也可以用作Spring bean。
https://stackoverflow.com/questions/786560
复制相似问题