我是靠谱客的博主 刻苦悟空,这篇文章主要介绍(转)Groovy的5种特殊运算符(可直接用于Play!的模板中),现在分享给大家,希望可以做个参考。

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" ]  
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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  的 写法  
复制代码
1
2
3
4
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}"   
复制代码
1
2
3
4
5
6
7
8
9
10
11
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  
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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)  
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
def list = ['老大','老二','老三'] //常规的遍历 list.each{ println it } String printName(name){ println name } //将printName作为参数进行遍历 list.each(this.&printName)

最后

以上就是刻苦悟空最近收集整理的关于(转)Groovy的5种特殊运算符(可直接用于Play!的模板中)的全部内容,更多相关(转)Groovy内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部