概述
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" ]
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 的 写法
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}"
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
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)
def list = ['老大','老二','老三'] //常规的遍历 list.each{ println it } String printName(name){ println name } //将printName作为参数进行遍历 list.each(this.&printName)
最后
以上就是刻苦悟空为你收集整理的(转)Groovy的5种特殊运算符(可直接用于Play!的模板中)的全部内容,希望文章能够帮你解决(转)Groovy的5种特殊运算符(可直接用于Play!的模板中)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复