`
tongyi121
  • 浏览: 40602 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Groovy中的五种特殊运算符

阅读更多

Spread Operator(展开运算符)


一个集合使用展开运算符(*.)可以得到一个元素为原集合各个元素执行后面指定方法所得值的集合

class Person{
    String name
    int age
    String toString(){
        return "${name}:${age}"
    }
}

def people = [new Person(name:'阿大',age:24),new Person(name:'阿二',age:18)]
println people*.toString()

========================

result:

["阿大:24", "阿二:18"]


Elvis Operator(二元运算符)


由于Groovy中“非空即真”,所以原java中的三元运算符可以简化为二元运算符

String name=  person.name?person.name:'unknown'// java的写法

def name2= person.name ?: "unknown" // Groovy 的写法




Safe Navigation/Dereference Operator(安全占位符)
安全占位符(?.)主要用于避免空指针异常

Person user
println user.name// Throws NullPointerException
// 为避免空指针异常,需要加上一个检查,java的写法如下
if (user != null) {
    println "Java FirstName = ${user.firstName}"

}
// Groovy语法的写法
println "Groovy FirstName = ${user?.firstName}"


Field Operator

查了词典field operator翻译为“场算符”,就中文来讲我不好理解。所以就不翻译了。

由于Groovy自动的支持属性的getter,但有时候应某种特定的需求,需要自动写一个特殊的getter,如果有时候需要调用特殊的getter,有
时候又想调用普通POJO那样的getter,那么怎么办呢?使用Groovy的Field Operator就可以轻松的解决这个问题。实例如下:

class Todo {
    String name
    def getName() {
      println "Getting Name"
      name
    }
}

def todo = new Todo(name: "Jim")
println todo.name
println todo.@name

========
result:
Getting Name
Jim
Jim


不使用Field Operator调的是写的getter

使用Field Operator调的是POJO的getter

Method Closure Operator

我们知道闭包可以被作为一个方法的参数,但是怎么让一个方法作为一个方法的参数呢?Method Closure Operator就是用来解决上述问题的,它允许将一个方法当成一个闭包作为另一个方法的参数。

def list = ['老大','老二','老三']
//常规的遍历

list.each{
    println it

}

String printName(name){
    println name
}

//将printName作为参数进行遍历
list.each(this.&printName)

分享到:
评论
4 楼 lixw 2008-12-18  
恩,楼主总结的不错,很实用,收藏了。
3 楼 tongyi121 2008-12-18  
JohnnyJian 写道

引用String name=  person.name?'unknown':person.name // java的写法写反了吧?

是写反了
2 楼 JohnnyJian 2008-12-17  
“Field Operator”我觉得可以翻译为“字段操作符”
1 楼 JohnnyJian 2008-12-17  
引用
String name=  person.name?'unknown':person.name // java的写法

写反了吧?

相关推荐

    Groovy语法系列教程之布尔(五).pdf

    本篇教程是关于Groovy编程语言中布尔(Boolean)类型的详细讲解,其中涉及到布尔类型的定义、使用以及Groovy对于布尔值操作的特殊规则。 首先,布尔类型是编程语言中一种基础的数据类型,用于表示逻辑上的真值,...

    groovy中map的基本操作1

    在Groovy编程语言中,Map是一种非常重要的数据结构,它用于存储键值对。在本篇博客中,我们将深入探讨Groovy中Map的基本操作,特别是通过标题和描述中给出的例子。 首先,创建一个Map非常简单。例如,`def map = [a...

    The Groovy 2 Tutorial(LeanPub)

    教程还会讲解条件运算符的真值表,以及如何在Groovy中使用。 20. **递增和递减运算符**:这些运算符用于对变量的值进行递增或递减操作。 以上只是该教程中可能包含的一些基础知识点,每个知识点的深入讲解和示例...

    groovy文档

    闭包是Groovy最强大的特性之一,它是一种特殊的函数,可以访问定义时所在作用域的变量。闭包使得Groovy能够轻松地处理迭代、资源管理等任务,并且提供了诸如`each`, `collect`, `find`等方法,极大地提高了代码的...

    groovy正则表达式基础1

    在Groovy中,正则表达式是通过`~`运算符或者使用斜杠(`/`)来定义的。这种特性使得Groovy在处理文本模式匹配时更加简洁和灵活。 1. **Groovy正则表达式定义** - 使用`~`运算符:`def reg1 = ~'he*llo'`,这里的`reg...

    groovy 1.5.5 API

    8. **类别(Category)**:类别是一种特殊类型的闭包,可以临时添加到任何类的方法。这对于增加类的功能或实现函数式编程风格非常有用。 9. **GDK(Groovy Development Kit)**:GDK是Groovy提供的扩展API,包含...

    Groovy语法系列教程之字符串(三).pdf

    这可能是Groovy中一种特殊的字符串表示方式,具体情况文档中未详细说明。 13. **字符** 文档未详细描述字符(Character)在Groovy中的特殊用法,但考虑到Groovy与Java的兼容性,字符处理应该与Java基本一致,但...

    groovy学习笔记

    Groovy是一种基于Java平台的动态脚本语言,它以其简洁的语法、强大的功能以及与Java的无缝集成而受到开发者喜爱。以下是对Groovy学习笔记各章节的详细解释: ### 第1章:数字和字符串 在Groovy中,所有的数字都是...

    groovy代码-测试null>0

    在Groovy中,`null`是一个特殊的值,表示变量没有被赋值或者对象不存在。在进行比较操作时,`null`与其他任何值的比较都需要特别注意,因为它会引发`NullPointerException`。 在Groovy中,`null`与数字进行比较时,...

    groovy代码-测试正则表达式

    在Groovy中,可以使用`=~`运算符来测试一个字符串是否符合某个正则表达式的模式。例如: ```groovy def text = "Hello, World!" def pattern = ~/World/i // i 表示不区分大小写 def matchResult = text =~ pattern...

    Grails基础教程.pdf

    - **一些新的操作符**:介绍Groovy中的一些特殊操作符,如范围操作符、三元运算符等。 **2.2 探索类型** - **基础类型**:讲解Groovy中的基本数据类型,包括数字类型、字符串类型等。 - **列表、映射和范围的语法...

    轻量级实时风控引擎全部代码+数据库.rar

    使用Springboot + Mongodb + Groovy + Es等框架搭建的轻量级实时风控引擎,适用于反欺诈应用场景,极简的配置,真正做到了开箱即用。 * 实时风控,特殊场景可以做到100ms内响应 * 可视化规则编辑器,丰富的运算符...

    雷达:实时风控引擎(Risk Engine),自定义规则引擎(Rule Script),完美支持中文,适用于反欺诈(Anti-fraud)应用场景,开箱即用!!! ,你得到到了吗?

    一种基于Java语言,使用Springboot + Mongodb + Groovy + Es等框架构建的轻量级实时风控引擎,适用于反欺诈应用场景,极简的配置,真正做到了开箱即用。通过学习本项目能快速了解风险的定义,更加细化风险,最后达到...

    JavaScript语言概述笔记和常用工具

    JavaScript的数据类型包括五种基本类型(原始类型):undefined、null、number、string和boolean,以及两种引用类型:object和function。JavaScript是弱类型语言,变量声明时不需要指定数据类型,可以存储任意类型的...

    Grails基础教程

    - **参与注入**:介绍了一种特殊的依赖注入方式,用于处理命令对象中的依赖关系。 **7.5 运用图像** - **处理文件上传**:讲解了如何处理用户上传的图片文件。 - **上传到文件系统**:介绍了如何将文件保存到文件...

    thymeleaf_3.0.5_中文参考手册.pdf

    4.12 默认表达式(Elvis operator):类似Groovy语言中的安全导航操作符。 4.13 哑操作符号:用于生成不会被转义的输出。 4.14 预处理:在最终渲染之前处理模板内容。 4.15 数据类型转换与格式化:允许在模板中转换...

    iReport-Ultimate-Guide-3 (1).pdf

    Groovy是一种灵活的脚本语言,也可以用作JasperReports中的表达式语言。 #### 3.8 使用JavaScript作为表达式语言 JavaScript是另一种可用的表达式语言,特别适用于前端开发人员。 #### 3.9 在iReport中使用...

    jdk1.7.0_80_64spring开发.rar

    1. **动态类型语言支持**:Java 7引入了“ invokedynamic ”字节码指令,为动态类型语言如Groovy、JRuby等提供了更好的支持。 2. **多租户区域(Applets)**:在JDK7中,Java浏览器插件(Applets)可以运行在多租户...

Global site tag (gtag.js) - Google Analytics