Groovy允許運算符重載。當一個類型實現某些方法時,您可以使用該類型的相應運算符。
對於+
實施的方法是加號,而不是加號。
對於大於或小於比較,Groovy在該對象上查找compareTo方法,併爲==
查找名爲equals的方法。 (如果你想比較引用彷彿在Java中使用==
,你必須使用is
)
下面是常見的數學運算符的表和方法用於重載它們:
Operator Method
a + b a.plus(b)
a - b a.minus(b)
a * b a.multiply(b)
a/b a.divide(b)
a++ or ++a a.next()
a-- or --a a.previous()
a << b a.leftShift(b)
你可以看到該BigDecimal的重載一些方法(你操作符重載的加,減,乘,除,而不是下一個,上一個,或leftShift):
groovy:000> BigDecimal.methods*.name
===> [equals, hashCode, toString, intValue, longValue, floatValue, doubleValue,
byteValue, shortValue, add, add, subtract, subtract, multiply, multiply, divide,
divide, divide, divide, divide, divide, remainder, remainder, divideAndRemainde
r, divideAndRemainder, divideToIntegralValue, divideToIntegralValue, abs, abs, m
ax, min, negate, negate, plus, plus, byteValueExact, shortValueExact, intValueEx
act, longValueExact, toBigIntegerExact, toBigInteger, compareTo, precision, scal
e, signum, ulp, unscaledValue, pow, pow, movePointLeft, movePointRight, scaleByP
owerOfTen, setScale, setScale, setScale, stripTrailingZeros, toEngineeringString
, toPlainString, round, compareTo, getClass, notify, notifyAll, wait, wait, wait
, valueOf, valueOf, valueOf]
所以操作者造成方法的BigDecimal宣佈已經,或通過groovy添加到BigDecimal,以獲得調用。它絕對不會對像float這樣的基本類型進行任何類型的轉換,以便能夠在基元上使用運算符。
該表取自this developerworks article by Andrew Glover and Scott Davis,其中有更多的細節和示例代碼。
答案是肯定的,在Groovy/grails的BigDecimals上使用比較(和關節)操作符是安全的,完整列表在這裏:http://www.ibm.com/developerworks/library/j-pg10255 /感謝mohsenmadi和Nathan Hughes –