Groovy元类

时间:2015-05-05 07:28:18

标签: groovy metaclass

我有一个现有的类,扩展了一个数字&实现Comparable,我一直在广泛使用这个类 - 包括我的测试类(Junit& Spock)。我也一直在测试类中使用==运算符来比较这个类的实例。

据我所知,Groovy不会使用.equals()来比较实现Comparable的类。此外,在拖网Groovy代码之后,我还发现我的类将使用Integer进行比较(因此丢失小数点等) - 因为它不是浮点数,BigDecimal,BigInteger,Long。即整数是后备。

为了克服这个问题,我尝试在Groovy的NumberMath类上进行元类编程。

class Test2 {

    @Test
    void blah(){
        NumberMath.metaClass.static.compareTo = {  Number left, Number right ->
            println "982374"
            return 123
        }
        def num1 = new Decimal("9.01")
        def num2 = new Decimal("9.02")

        // this prints 982374
        println NumberMath.compareTo(num1, num2)

        // this doesnt print 982374
        num1 == num2
    }


}

但这似乎不起作用(如上面的代码段所示)。 ==运算符不会调用我在测试中提供的compareTo方法。 我在这里错过了什么吗?

提前致谢!

此致

亚历

0 个答案:

没有答案