Groovy 扩展元类
我开发了一个类,它有一些增强 Integer 的方法,它主要让我这样做:
def total = 100.dollars + 50.euros
现在我必须扩展 Integer.metaClass 做这样的事情:
Integer.metaClass.getDollars = {->
Money.Dollar(delegate)
}
我尝试将其放在文件的底部,在 Money 类声明之前,但是编译器说一个名为 Money 的类已经存在,我知道为什么会发生这种情况(因为 groovy 创建了一个具有空 static void main 的文件名的类来运行此代码)。
我还尝试在类中使用静态块,如下所示:
static {
Integer.metaClass.getDollars = {->
Money.Dollar(delegate)
}
}
这都不起作用。
第三种解决方案是更改文件名(如 MoneyClass.groovy)并保留类名(class Money),但这似乎有点奇怪。
我还有什么可以做的吗? 谢谢。
I've developed a Class that has some methods that augment Integer, it mainly lets me do this:
def total = 100.dollars + 50.euros
Now I have to extend Integer.metaClass doing something like this:
Integer.metaClass.getDollars = {->
Money.Dollar(delegate)
}
I tried putting that at the bottom of the file, before the Money class declaration, but the compiler says that a class Named Money already exists, I know why it happens (because groovy creates a class with the name of the file with an empty static void main to run this code).
I also tried using a static block inside the class like this:
static {
Integer.metaClass.getDollars = {->
Money.Dollar(delegate)
}
}
This neither works.
A third solution would be to change the file name (like MoneyClass.groovy) and keep the class name (class Money) but that seems a bit weird.
Is there anything else I can do? Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
只需将其放入任何类的任何方法中(可能是一个 bean) TypeEnhancer.groovy:
只需通过调用 start() 创建并初始化:
new TypeEnhancer().start();
。要禁用增强功能,请调用
new TypeEnhancer().stop();
。 该 bean 也可以用作 Spring bean。Just put it in any method of any class maybe a bean TypeEnhancer.groovy:
Just create and initalize by calling start():
new TypeEnhancer().start();
.To disable the enhancement, call
new TypeEnhancer().stop();
. The bean can also used as Spring bean.