`

Groovy运算符

阅读更多

Spread Operator(展开运算符)

 

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

 

Groovy代码

 

   1. class Person{  

   2.     String name  

   3.     int age  

   4.     String toString(){  

   5.         return "${name}:${age}"  

   6.     }  

   7. }  

   8.   

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

  10. println people*.toString()  

  11.   

  12. ========================  

  13.   

  14. result:  

  15.   

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

 

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中的三元运算符可以简化为二元运算符

 

Groovy代码

 

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

   2.   

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

 

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

 

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

 

 

 

 

 

Safe Navigation/Dereference Operator(安全占位符)

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

 

Groovy代码

 

   1. Person user  

   2. println user.name// Throws NullPointerException  

   3. // 为避免空指针异常,需要加上一个检查,java的写法如下  

   4. if (user != null) {  

   5.     println "Java FirstName = ${user.firstName}"  

   6.   

   7. }  

   8. // Groovy语法的写法  

   9. println "Groovy FirstName = ${user?.firstName}"  

 

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就可以轻松的解决这个问题。实例如下:

 

Groovy代码

 

   1. class Todo {  

   2.     String name  

   3.     def getName() {  

   4.       println "Getting Name"  

   5.       name  

   6.     }  

   7. }  

   8.   

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

  10. println todo.name  

  11. println todo.@name  

  12.   

  13. ========  

  14. result:  

  15. Getting Name  

  16. Jim  

  17. Jim  

 

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就是用来解决上述问题的,它允许将一个方法当成一个闭包作为另一个方法的参数。

 

Groovy代码

 

   1. def list = ['老大','老二','老三']  

   2. //常规的遍历  

   3.   

   4. list.each{  

   5.     println it  

   6.   

   7. }  

   8.   

   9. String printName(name){  

  10.     println name  

  11. }  

  12.   

  13. //将printName作为参数进行遍历  

  14. list.each(this.&printName)  

分享到:
评论

相关推荐

    groovy入门经典,groovyeclipse 插件

    此外,Groovy的运算符重载和元编程能力使代码更加简洁和动态。 在安装GroovyEclipse插件后,开发者可以通过Eclipse的New -> Groovy Project来创建Groovy项目。插件还会提供Groovy编译器,确保代码的正确性。同时,...

    groovy速查手册

    Groovy支持多种运算符,包括算术运算符、关系运算符、逻辑运算符等。此外,Groovy还支持自定义运算符,这使得开发者可以根据需求定义自己的运算符行为。 #### 五、集合数据类型 Groovy支持多种集合数据类型,如列表...

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

    值得注意的是,Groovy也支持位运算符(&, |, ^, ~)和位赋值运算符(&=, |=, ^=, ~=, , >>=),这些运算符也可以用于布尔类型的运算中。位运算符通常用在二进制级别的操作,而位赋值运算符则是将位运算符的结果重新赋值...

    Groovy中文版教程

    3. **简洁的语法糖**:Groovy提供了一些Java没有的语法糖,如列表和映射的简写,以及三元运算符的简化形式。这使得代码更加易读和简洁。 4. **元编程**:Groovy允许在运行时修改或扩展类的行为,这是通过元编程实现...

    groovy脚本执行工具.zip

    5. 极简语法:比如单行if语句、三元运算符以及列表推导等,使得代码更简洁。 总的来说,这个“groovy脚本执行工具”是一个对于Java开发者非常有用的工具,它简化了Groovy脚本的执行流程,便于在日常开发和测试中...

    groovy 经典入门 通俗易懂

    - Groovy的语法允许单行if语句和三元运算符,使得代码更紧凑。 2. **面向对象编程** - Groovy完全支持面向对象编程,包括类、继承、接口、封装和多态。 - 类定义可以使用`class`关键字,与Java类似,但更简洁。...

    groovy的简单例子

    1. **简洁的语法**:Groovy的语法比Java更加精简,例如,可以省略分号、大括号,并且支持单行if语句和三元运算符。例如: ```groovy def age = 30 if (age > 18) println('成年') ``` 2. **动态类型**:与Java...

    目前最新版groovy-2.4.11

    2. **简洁语法**:Groovy的语法比Java更加紧凑和直观,如三元运算符、闭包等,使代码更易读写。 3. **面向对象**:Groovy完全支持面向对象编程,包括类、接口、继承、多态等概念。 4. **内置集合操作**:Groovy提供...

    groovy文档

    Groovy的数字类型同样强大,支持整数、浮点数、大整数、分数等多种类型,并提供了丰富的数学运算符和方法。此外,Groovy还支持自动类型转换,使得数字运算更加灵活和直观。 ### 集合类型 Groovy的集合类型包括...

    groovy in action中文版(1)

    - Groovy中的数字类型支持多种运算符。 - **3.6.2 GDK为数字提供的方法** - Groovy Development Kit (GDK) 为数字类型提供了一系列附加的方法。 #### 八、集合类型 **4.1 使用ranges** - **4.1.1 规定ranges** ...

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

    此外,Groovy还引入了列表和映射的便捷操作,如使用下标索引和“.”运算符访问属性,以及使用`each`或`forEach`迭代集合。 2. **闭包(Closure)**:Groovy中的闭包是其强大之处,它是一种可以捕获和存储上下文环境...

    The Groovy 2 Tutorial(LeanPub)

    17. **运算符**:Groovy支持多种运算符,如算术运算符、条件运算符、字符串运算符、正则表达式运算符、集合运算符和对象运算符等。运算符重载、位运算符和复合赋值运算符也是重点。 18. **赋值运算符**:Groovy的...

    Groovy PPT

    3. **运算符重载**:Groovy支持对基本运算符进行重载,这为开发者提供了更多的表达方式。 4. **多重方法**:多重方法允许根据参数的不同类型来选择不同的实现方式。 5. **列表、映射、范围和正则表达式的字面量声明*...

    Groovy学习笔记

    - **表达式**:Groovy支持使用各种表达式,包括数字、变量、运算符等。 - **Java类的使用**:可以直接使用Java中的类和方法,甚至在表达式中。 - **方法定义**:定义方法与Java相似,但Groovy中可以省略`return`...

    groovy 1.5.5 API

    1.5.5版本可能包含对这些特性的详细解释,包括如何声明变量、调用方法、使用运算符以及控制流程语句。 2. **类库**:Groovy提供了一系列内置的类库,如GroovyShell、GroovyScriptEngine等,它们使得执行Groovy脚本...

    Groovy入门经典.pdf

    此外,Groovy支持单行if和三元运算符,使代码更简洁。 2. **动态类型**:Groovy允许不声明变量类型,它会在运行时自动推断。这在快速原型和脚本编写时非常有用。 3. **闭包**:Groovy中的闭包是一种强大的功能,它...

    Groovy语法系列教程之集合(六)【完结】.pdf

    此外,Groovy还支持使用`运算符将元素添加到列表的末尾。列表同样可以使用范围范围来访问元素: ```groovy def letters = ['a', 'b', 'c', 'd'] assert letters[0] == 'a' assert letters[-1] == 'd' letters[2] = ...

    groovy正则表达式基础1

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

Global site tag (gtag.js) - Google Analytics