Groovy - 操作符之 “<<”

“<<”操作符在Java語言裏被我們熟知的是位運算中的左移運算符。在Groovy語言裏,它依然是左移運算符,這我們都很熟悉,在這裏就不再多說。而我們要說的卻是除此之外,在Groovy語言裏爲“<<”運算符新增的功能。

 

一、對List對象和Set對象的操作

對於List對象,在前面的文字裏我們提到過:

def list = ['a','b','c']
 
list.each{
	println it
}
 
println'-----------------------'
list<<'e'
list<<'f'
list<<"haha"
      
list.each{
	println it
}

不錯,我們在Groovy語言裏,使用“<<”運算符取代了Java語言中List類的add方法,帶來了編碼方面的簡單和快捷。上面代碼的輸出結果爲:

a
b
c
-----------------------
a
b
c
e
f
haha

除了List對象外,“<<”操作符同樣能夠Set對象提供add功能,請看下面的例子:

def set = ['a','b','c'] as Set
      
set.each{
	println it
}
 
println'-------------------------'
set<<'i'
set<<'j'
set<<'b'
      
set.each{
	println it
}

爲Set對象add元素同樣簡單,下面是它的輸出結果:

a
c
b
-------------------------
i
a
c
j
b

爲了驗證Set對象的特性,我特意給set對象多add了一個“b”字符串,最後打印的結果證明了Set對象的特性:1.沒有順序;2.沒有重複的元素。

 

二、對StringBuffer對象的操作

在Java語言中,對StringBuffer對象的操作如下:

StringBuffer sb = new StringBuffer()
sb.append('I can say my ')
sb.append('a')
sb.append('b')
sb.append('c')
      
System.out.println(sb.toString())

打印結果爲:

I can say my abc

而Groovy語言中,同樣是使用“<<”操作符來對append方法進行簡化的:

def sb = new StringBuffer()

sb<<'I'
sb<<' can say'
sb<<' my a'
sb<<'b'
sb<<'c'

println sb.toString()

打印結果爲:

I can say my abc

 

三、對流對象的操作

在Java語言中,對流對象的操作通常是read和write,請看下面的例子:

try
{
	OutputStreamWriter wtr= new OutputStreamWriter(new FileOutputStream("TheOutput.txt"));
	wtr.write("abc");
	wtr.close();
}
catch(Exception e)
{
	e.printStackTrace();
}

而上面的例子在Groovy語言中將是下面的樣子:

def wtr= new OutputStreamWriter(new FileOutputStream('TheOutput.txt'))
wtr<< 'abc'
wtr.close()

不錯,是使用“<<”操作符代替了write方法。

 

四、其他

除了上面的一些對“<<”操作符的常用方法,在Groovy語言中,還有一些不常用的地方也會使用到“<<”操作符。請看下面的例子:

class Empl {

	String name

	staticvoid main(args) {

		Empl.metaClass.nameInUpperCase << {-> delegate.name.toUpperCase() }
		def b = new Empl(name:"Tom")

		println b.nameInUpperCase()
	} 
}

 在這裏,“<<”操作符是賦值的意思,即將後面的閉包賦給Empl.metaClass.nameInUpperCase。整個語句與下面的語句等同:

Empl.metaClass.nameInUpperCase = {-> delegate.name.toUpperCase()}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章