我有一个现有的类,扩展了一个数字&实现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方法。 我在这里错过了什么吗?
提前致谢!
此致
亚历