`
tongyi121
  • 浏览: 40419 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Groovy中的五种特殊运算符

阅读更多

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"]


Elvis Operator(二元运算符)


由于Groovy中“非空即真”,所以原java中的三元运算符可以简化为二元运算符

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}"


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


不使用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)

分享到:
评论
4 楼 lixw 2008-12-18  
恩,楼主总结的不错,很实用,收藏了。
3 楼 tongyi121 2008-12-18  
JohnnyJian 写道

引用String name=  person.name?'unknown':person.name // java的写法写反了吧?

是写反了
2 楼 JohnnyJian 2008-12-17  
“Field Operator”我觉得可以翻译为“字段操作符”
1 楼 JohnnyJian 2008-12-17  
引用
String name=  person.name?'unknown':person.name // java的写法

写反了吧?

相关推荐

    Java中使用Groovy的三种方式

    Java中使用Groovy的三种方式,详细见我的博客。

    groovy-3.0.9-API文档-中文版.zip

    赠送jar包:groovy-3.0.9.jar; 赠送原API文档:groovy-3.0.9-javadoc.jar; 赠送源代码:groovy-3.0.9-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    groovy和Java相互调用1

    Groovy 调用 Java 类groovy 调用 Java class 十分方便,只需要在类前导入该 Java 类,在 Groovy 代码中就可以无缝使用该

    groovy-2.5.1-API文档-中文版.zip

    赠送jar包:groovy-2.5.1.jar; 赠送原API文档:groovy-2.5.1-javadoc.jar; 赠送源代码:groovy-2.5.1-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    Groovy API docs 2.4.15 (CHM格式)

    使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的其他特性。 Groovy是JVM的一个替代语言(替代是指可以用 Groovy 在Java平台上进行 Java 编程),使用方式基本与使用 Java代码的方式相同,该语言特别...

    eclipse中的groovy插件

    eclipse中的groovy插件 eclipse中的groovy插件 实用

    Java调用Groovy,实时动态加载数据库groovy脚本

    Java调用Groovy,实时动态加载数据库groovy脚本,java读取mongoDB的groovy脚本,加载实时运行,热部署

    Groovy入门经典 中英文版本

    Groovy入门经典 中英文版本,包含以下文件: Groovy Program.pdf Groovy入门经典.pdf 图书链接:http://product.china-pub.com/36984

    Groovy学习资料-中文.rar

    Groovy学习资料-中文.rar。Groovy学习资料。Grails学习资料。mht网页格式。

    apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本

    apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望...

    groovy中的特殊注解1

    2.@Delegate只有当派生类是真正可替换的,而且可代替基类使用时,继承才显示出其优势 3.@Immutable不可变对象天生是线程安全的,将其字段标记为f

    groovy入门经典,groovyeclipse 插件

    groovy入门经典,groovyeclipse 插件

    [Groovy] Making Java Groovy 英文版

    Making Java Groovy is a practical handbook for developers who want to blend Groovy into their day to day work with Java It starts by introducing the key differences between Java and Groovy and how you...

    Groovy高效编程

    Groovy语言。 里面详细介绍了一些很有意思的方法。

    微服务项目中添加groovy文件技巧.docx

    软件项目的可扩展性和动态维护性是非常重要的,例如在微服务的网关动态过滤器中,要实现过滤器的动态更新而不影响项目的持续运行,就需要借助groovy的动态编译功能,而这个功能是通过 .groovy文件实现的。...

    Groovy在Spring中的简单使用

    Groovy在Spring中的简单使用,欢迎下载!

    精通 Groovy--下一代开发语言

    虽然 Groovy 的语法源于 Smalltalk 和 Ruby 这类语言的理念,但是可以将它想像成 Java 语言的一种更加简单、表达能力更强的变体。(在这点上,Ruby 与 Groovy 不同,因为它的语法与 Java 语法差异很大。) 许多 Java...

    Groovy轻松入门—搭建Groovy开发环境

    Groovy轻松入门—搭建Groovy开发环境 Groovy轻松入门—搭建Groovy开发环境

    groovy脚本实现对数据库的增删改查

    groovy脚本实现对数据库的增删改查,groovy脚本不需要编译,十分实用

    Groovy v2.4.13官方版

    使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的其他特性。  Groovy是JVM的一个替代语言(替代是指可以用 Groovy 在Java平台上进行Java 编程),使用方式基本与使用 Java代码的方式相同,该语言特别...

Global site tag (gtag.js) - Google Analytics