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)