概述
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运算符的全部内容,希望文章能够帮你解决Groovy运算符所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复