4

我开发了一个类,它有一些增强整数的方法,它主要让我这样做:

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)并保留类名(类 Money),但这似乎有点奇怪。

还有什么我可以做的吗?谢谢。

4

1 回答 1

3

只需将它放在任何类的任何方法中,也许是一个 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。

于 2009-04-24T21:07:59.907 回答