`
李丹.杭州
  • 浏览: 15518 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Groovy探索之Gstring(转摘)

阅读更多
声明:转自:软件信雅达


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中会出问题。
分享到:
评论

相关推荐

    groovy入门经典,groovyeclipse 插件

    Groovy还引入了GString,这是一种可变字符串,允许在字符串中嵌入表达式,如`${expression}`。此外,Groovy的运算符重载和元编程能力使代码更加简洁和动态。 在安装GroovyEclipse插件后,开发者可以通过Eclipse的...

    groovy in action 中文版 2017.11

    在字符串处理方面,Groovy引入了GString,这种字符串可以包含表达式,能够在运行时被评估。同时,Groovy还引入了对正则表达式的支持,使得文本模式匹配和处理更加方便。 在集合类型方面,Groovy支持使用范围...

    Learning Groovy 3

    2. **Groovy语法特性**:Groovy提供了许多简化编程的特性,如自动类型推断、闭包、groovy shell、GString(类似Java的字符串模板)等。此外,Groovy 3对语法做了进一步优化,使其更加符合现代编程习惯。 3. **动态...

    apache-groovy-sdk-2.4.4

    8. **闭包和GString**:Groovy的闭包和GString是其简洁语法的关键元素,闭包提供了一种强大的函数式编程特性,而GString则简化了字符串插值操作。 9. **与Java的无缝集成**:Groovy可以直接调用Java库,Java代码也...

    Groovy轻松入门—搭建Groovy开发环境

    - **GString**:Groovy中的字符串可以使用`${expression}`内嵌表达式,例如`"Hello, ${name}"`。 - **方法默认参数和命名参数**:Groovy允许方法定义默认参数值,并通过键值对的方式调用方法。 - **元编程**:...

    groovy

    4. GString:类似于Java的字符串,但支持占位符表达式,使字符串操作更便捷。 5. 链式调用:对象属性和方法可以连续调用,如`object.property.method()`,增强了代码的可读性。 三、领域应用 1. 脚本和自动化:...

    Groovy学习笔记 PDF版

    5. **GString(字符串插值)**:Groovy的GString允许在字符串中直接插入变量值,使得字符串的构建更加直观。 6. **内建的集合支持**:Groovy提供了丰富的集合操作,如map、filter、each等,使得处理数组和列表变得...

    apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本

    apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望...

    groovy-all-1.8.1.jar.zip

    5. GString:Groovy的GString允许在字符串中嵌入表达式,例如`"Name is ${name}"`,使得字符串处理更为方便。 6. 枚举和注解的简化:Groovy的枚举和注解创建也比Java更加直观和简洁。 7. 类型推断:Groovy编译器...

    Java调用Groovy,实时动态加载数据库groovy脚本

    1. 引入Groovy库:在Java项目中添加Groovy的相关依赖,通常是`groovy-all`,确保Java能够访问Groovy运行时环境。 2. 创建GroovyClassLoader:使用这个类加载器可以动态加载和执行Groovy脚本。它继承自Java的...

    Groovy入门经典.pdf

    5. **GString**:Groovy的GString可以方便地进行字符串插值,类似模板引擎,使得动态构建字符串变得简单。 6. **Grails框架**:如果对Web开发感兴趣,Groovy的Grails框架是值得探索的。它是一个基于Groovy的全栈...

    Grails&Groovy学习资料

    4. GString:Groovy的GString(类似于Java的String)支持模板语法,使字符串拼接更直观。 5. 极简的语法:Groovy的语法比Java更加精简,例如,可以省略括号和分号。 Grails框架: Grails是建立在Groovy之上的全栈...

    groovy初学者的福音

    5. **GString与字符串操作**:Groovy的GString是一种可以包含表达式的字符串,它允许你在字符串中嵌入变量值。Groovy还提供了丰富的字符串操作方法,比如`tokenize`, `trim`, `split`等。 6. **集合操作**:Groovy...

    groovy-binary-2.2.2.zip

    4. **GString**:Groovy的GString可以方便地进行字符串插值,类似于Ruby的字符串模板。 5. **GroovyShell和GroovyScriptEngine**:这些工具允许在运行时执行Groovy脚本,使得Groovy成为理想的脚本语言。 6. ** ...

    Groovy学习资料(包括Groovy in action 的中英文以及API)

    总的来说,"Groovy in Action"提供了全面的学习材料,配合API文档,可以帮助开发者迅速掌握Groovy的精髓,并将之应用到实际项目中。通过阅读这本书和实践其中的示例,你将能更好地理解和利用Groovy的强大力量,提升...

    groovy-api-chm

    此外,Groovy还引入了GString(类似模板字符串)和行内表达式等特性。 2. **类与对象**:Groovy中的类与Java类似,但更易用。它支持单例、抽象类、接口以及构造器。Groovy类默认是public,并且可以不写public关键字...

    Groovy in Action[文字版][中文]

    4. **GString与字符串模板**:Groovy的GString能够方便地进行字符串插值,它允许在字符串中嵌入表达式,使得输出动态内容变得更简单。 5. **Groovy Shell与 Grape**:Groovy Shell提供了一个交互式的环境来执行...

    groovy-docs-1.8.9.zip

    3. **GString**:Groovy的GString提供了一种更方便的方式来构造字符串,可以包含表达式,这比Java的字符串模板更灵活。 4. **GroovyShell和GroovyScriptEngine**:这两个类允许在运行时执行Groovy代码,是脚本语言...

Global site tag (gtag.js) - Google Analytics