Groovy的操作符重载

来源:互联网 发布:informix默认端口 编辑:程序博客网 时间:2024/05/29 12:31

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
在某些方面操作符重载使表达式更具表现力. 不过, 通常情况下我并不喜欢操作符重载,因为 它很难被理解.

原创粉丝点击