程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Groovy >> Groovy探索之Gstring

Groovy探索之Gstring

編輯:Groovy

Groovy語言裡有很多看起來不起眼的小玩意,但使用以後,我們卻常常會驚異於它的巨大能量,Gstring就是其中之一。

Java的String對象是我們最最常用的對象,卻也是诟病最多的對象。一句話來說,String使用起來非常不方便。而Gstring不但使用方便,而且更是Groovy語言動態性的基礎。

所謂Gstring,是指通過雙引號引起來的、帶有占位表達式的字符串,如:def str = “${name}’s dog is ${dog.name}”,其中由美元符號括起來的部分就是占位表達式,而str就是一個Gstring對象。

這裡試著列出其中的一些常用方法。

1.字符串疊加

Java String類型的字符串疊加是通過String對象相加運算完成的,其形式如下:

def result = name+” is ”+age+” years old”;

這種形式的字符串相加使得我們在編碼的時候非常不方便,而Gstring則不同了,它可以使我們非常方便的編碼,形式如下:

def result = “$name is $age years old”;

2.方便字符串與函數的運算

在編碼的過程中,我們經常會將表達式結果和字符串一起運算,Gstring可以使我們在這樣的計算方面更加方便和輕巧。請看下面的例子:

def result = “key: person.name value: ${map[‘person.name’]}”
def result = “${book?.author?.name}”

等等

3.Gstring的動態性

Groovy語言編程有著良好的動態性,可以使得我們寫出十分優雅的底層抽象代碼。而Gstring則是這種動態性編程的基礎。

在反射方面,使用Gstring可以十分方便的對一個類的屬性和方法進行訪問。如下:

假設我們有一個Person類

class Person
{
String name
}

下面我們通過Gstring對象就可以對Person的對象的屬性進行操作了。

String propName = ‘name’;
Person p = new Person()
p.”${ propName }” = ‘tom’

println p.”${propName}”

同樣,通過Gstring對象,我們也可以十分方便對對象的方法進行操作,如下:

我們假設上面的Person類有一個toString()方法。

public String toString()
{
return name
}

那麼,我們就可以對該方法進行如下的操作。

String functionName = “toString”
Person p = new Person()
p.name = “mike”

println p.”${functionName}”()

在正則表達式方面,我們也可以使用Gstring對象對正則表達式進行運行時的替換,這也是Gstring所做的一個有意思的工作,如下:

def reference = “pattern”

println reference == /${reference}/

如果Gstring對象所引用的是一個對象,那麼需要注意的是該Gstring對象的值等於運行時它所引用的對象的值;換句話說,該Gstring對象的值是可能變化的。具體說來就是隨著它引用的那個對象變化而變化。下面給出一個例子。

還是Person類為例:

class Person
{
String name

public String toString()
{
return name
}

}

很簡單的一個類,下面我們對該類進行操作:

Person p = new Person()
p.name = ‘tom’

def str = “${p}”

println str

p.name = ‘mike’

println str

運行上面的代碼,我們可以看到,打印的第一行為:tom,而第二行卻是:mike。就是因為str這個Gstring對象引用的是p這個Person對象,而這個對象是可能隨時變化的。

4.Gstring在Gsql中的問題

Gstring使用非常方便,我們在使用Groovy語言的時候,肯定會自覺不自覺的大量使用它。需要注意的是,雖然它很方便,但是在使用的過程中仍然會遇到問題。下面一個例子是我在對Oracle Blob字段進行操作時候遇到了,當時就郁悶了一段時間。

def selectSql = "select other from tran where id = '5'"
def updateStr = "${selectSql} for update"
def row = sql.firstRow(updateStr)

運行上面的代碼時,結果就報錯了。解決的方法有兩個:

一是不使用Gstring,def updateStr = selectSql+' for update'

二是將updateStr對象聲明為String,String updateStr = "${selectSql} for update"

後來在Groovy的官方網站上查到了這個問題,但上面仍然說明為什麼Gstring在Gsql中會出問題。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved