我开发了一个类,它有一些增强Integer的方法,主要是让我这样做:
def total = 100.dollars + 50.euros
现在我必须扩展Integer.metaClass做这样的事情:
Integer.metaClass.getDollars = {->
Money.Dollar(delegate)
}
我尝试将它放在文件的底部,在Money类声明之前,但编译器说已经存在一个Named Money类,我知道它为什么会发生(因为groovy创建了一个带有文件名的类)一个空的静态void main来运行这段代码。)
我也尝试在类中使用静态块,如下所示:
static {
Integer.metaClass.getDollars = {->
Money.Dollar(delegate)
}
}
这不起作用。
第三个解决方案是更改文件名(如MoneyClass.groovy)并保留类名(Money类),但这看起来有点奇怪。
还有什么我可以做的吗?感谢。
答案 0 :(得分:2)
将它放在任何类的任何方法中都可能是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。