演算子のオーバーロード

Index

 Groovyは数、コレクション、マップなど様々なデータで動作可能な演算子のオーバーローディングを提供する。
 Groovyの様々な演算子が正規のJavaメソッド呼び出しに対応している。 これは、開発者が独自の演算子オーバーロードで強化されたオブジェクトを用意することを可能にする。 次の表は、Groovyで強化された演算子の一覧である。

OperatorMethod
a+ba.plus(b)
a - ba.minus(b)
a * ba.multiply(b)
a ** ba.power(b)
a / ba.div(b)
a % ba.mod(b)
a | ba.or(b)
a & ba.and(b)
a ^ ba.xor(b)
a++ , ++a a.next()
a-- , --aa.previous()
a[b]a.getAt(b)
a[b] = ca.putAt(b, c)
a << ba.leftShift(b)
a >> ba.rightShift(b)
switch(a) { case(b) : }b.isCase(a)
~aa.bitwiseNegate()
-aa.negative()
+aa.positive()

注意:次の比較演算子は、nullを比較した時でもjava.lang.NullPointerExceptionの発生をしない。

Operator Method
a == b a.equals(b) or a.compareTo(b) == 0 **
a != b ! a.equals(b)
a <=> b a.compareTo(b)
a > b a.compareTo(b) > 0
a >= b a.compareTo(b) >= 0
a < b a.compareTo(b) < 0
a <= b a.compareTo(b) <= 0

** 注意: == 演算子は.equals()と常に同じである。

 

演算に関する注意

 Groovyの比較演算子はnullをうまく扱うので、a == b はNullPointerExceptionを発生させることはない。

def a = null
def b = "foo"

assert a != b
assert b != a
assert a == null

 さらに、異なる型の数を比較する場合、比較の前に最も大きな数値型にそれらを変換する。したがって、次の例はGroovyで正しく動作する。

Byte a = 12
Double b = 10

assert a instanceof Byte
assert b instanceof Double

assert a > b

 

このページの先頭へ戻る