Groovy 使用 Gstring 进行工作

Gstring像增加了额外功能的字符串(实际上是groovy.lang.Gstring,而不 是java.lang.String的子类,因为String的类是final的,不管怎样,Gstring 能像String一样使用,在需要的时候Groovy自动将Gstring转换为String),通过双引号进行声明,决定双引号声明的字符串是一个Gstring实例的特征是字符串内容中是否出现占位符,占位符也许通过完整的表达式语法出现“${表达式}”,或者以一个简单的“$reference”语法形式出现,看看表3.2的例子:

在一个Gstring中,可以通过$符号简单的引用到一个变量,这种最简单的方式如(1)显示,而(2)显示了通过“.”符号访问到变量对象的属性。

(3)显示了通过${}符号表示的完全表达式,在花括号中可以是任意的groovy表达式,花括号表示一个闭包。

在实际生活中,Gstring是方便的模板脚本,在(4)中使用Gstring创建了一个SQL查询语句,groovy提供了更多的模板支持,第八章将介绍这些模板,如果在模板(或者别的Gstring)中需要使用到一个$符号,必须像(5)示例那样使用“\”进行转义。

虽然Gstring通常被像java.lang.String那样使用,但他们的实现不同于固定 的字符串,并且动态的部分(也叫values)是独立的,如下代码的显示:me = 'Tarzan' you = 'Jane' line = "me $me - you $you" assert line == 'me Tarzan - you Jane' assert line instanceof GString assert line.strings[0] == 'me ' assert line.strings[1] == ' - you ' assert line.values[0] == 'Tarzan' assert line.values[1] == 'Jane'(Gstring中的 每个值都是在 声明的时候进 行绑定的,在 Gstring被转换为java.lang.String的时候(toString方法被显式调用或者隐式调用)的时候,每个值被写到字符串中,由于写一个值的逻辑是复杂的,这种行为能用于各种高级的途径)。

现在你已经了解到了groovy对字符串的支持,接下来说说在groovy类库中是如何使用这些字符串的,这将让你对java和groovy的相互作用有第一印象,我们将从典型的java风格逐步过渡到groovy模式,仔细的观察每一个步骤。