Groovy的操作符重载
你可以使用Groovy实现操作符重载, 那么 Groovy是怎么做到的了?其实非常简单, 事实上 —每个运算符都有一个标准的映射方法.因此, 在Java中你可以使用这些方法,对于Groovy 你 可以使用操作符或操作符对应的方法,这两者任意一种. 这里一个实例展示操作符重载:
for(i = 'a' ; i < 'd' ; i++) {
println i
}
你使用’++’操作符来循环’a’—‘c’中的字符.这个’++’操作符映射到String类的next( ) 方法. 上面代码的输出:
a
b
c
我们再来看一个,其他这个JDK1.5的循环在这里也是使用String的 next( ) 方法:
for (i in 'a'..'c' ) {
println i
}
String类有许多重载操作符, 你会在后面看到. collection类—ArrayList 和Map—也有方便的重 载操作符.假如你想添加一些元素到collection中, 你可以使用 << 操作符,它会转化为 Groovy 为Collection添加的额外方法leftShift( ) ,像这里:
lst = ['hello' ]
lst << 'there'
println lst
输出:[“hello” , “there” ]
你可以通过添加映射方法来为自己的类提供操作符, 像 plus( ) 对应+. 这里将展示一个操作符重载:
class ComplexNumber {
def real, imaginary
def plus(other) {
new ComplexNumber(real: real + other.real,imaginary: imaginary + other.imaginary)
}
String toString() {
"$real ${imaginary > 0 ? '+' : ''} ${imaginary}i" }
}
c1 = new ComplexNumber(real: 1, imaginary: 2)
c2 = new ComplexNumber(real: 4, imaginary: 1)
println c1 + c2
因为你ComplexNumber类中添加了plus( ) 方法,Groovy 允许你使用 + 获取两个复数相加 的结果 ,输出:5 + 3i
在某些方面操作符重载使表达式更具表现力. 不过, 通常情况下我并不喜欢操作符重载,因为 它很难被理解.