`
flowercat
  • 浏览: 358203 次
社区版块
存档分类
最新评论

(转)Groovy的5种特殊运算符(可直接用于Play!的模板中)

    博客分类:
  • java
阅读更多

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)  
def list = ['老大','老二','老三']
//常规的遍历

list.each{
    println it

}

String printName(name){
    println name
}

//将printName作为参数进行遍历
list.each(this.&printName)
分享到:
评论

相关推荐

    groovy模板

    groovy模板

    Play2模板引擎Japid42.zip

    Play1使用groovy模板作为渲染引擎,而Play2使用Scala模板。在Play1时期,Japid作为groovy的替代品,非常受欢迎。而在Play官方使用Scala替换groovy后,性能虽然有所提高,但是限于Scala编译器的性能,仍然远不如Play2...

    Java中使用Groovy的三种方式

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

    groovy

    groovy的帮助文档 !!!!!

    play1.1_API

    Play!是一个full-stack(全栈的)Java Web应用框架,包括一个简单的无状态MVC模型,具有Hibernate的对象持续,一个基于Groovy的...5、优秀的错误报告功能:当发生异常,此框架会直接显示出错代码,甚至是模板代码。

    [Groovy入门]第十讲.使用模板引擎开发界面

    [Groovy入门]第十讲.使用模板引擎开发界面

    Groovy API docs 2.4.15 (CHM格式)

    Groovy 是 用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的其他特性。 ...

    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; 赠送Maven依赖信息文件:groovy-3.0.9.pom; 包含翻译后的API文档:groovy-3.0.9-javadoc-API...

    groovy和Java相互调用1

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

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

    在编写新应用程序时,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。目前的 Groovy 版本是 1.5.4,在 Java 1.4 和 Java 5 平台上都能使用,也能在 Java 6 上使用。 Groovy 的一个好处是,它的语法...

    groovy脚本转painless语法总结

    项目从es2升级到es6,groovy脚本也要相应的转换为painless脚本,转换过程中遇到了很多坑,特此总结成文档,供大家一起交流学习。

    eclipse中的groovy插件

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

    Groovy v2.4.13官方版

    Groovy 是用于Java虚拟机的一种敏捷的动态语言,它结合了Python、Ruby和Smalltalk的许多强大的特性。它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。使用该种语言不必编写过多...

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

    而在微服务项目中直接添加.groovy文件,存在热点引用不可用问题,即代码中添加一个对象时,编译器不认识则在对象下面画一条横线,而当鼠标移到这个对象时,弹不出可引用包的列表。本文论述了解决这个问题的技巧。

    Groovy在Spring中的简单使用

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

    Groovy入门经典 中英文版本

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

    groovy语言对应插件

    用于soapui中,groovy语言开发的插件之一用于soapui中,groovy语言开发的插件之一

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

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

    gstorm, 在groovy脚本中,一个用于数据库和CSV文件的简单 ORM.zip

    gstorm, 在groovy脚本中,一个用于数据库和CSV文件的简单 ORM GStorm - Groovy单个表 ORMGStorm是一个轻量级的持久性 helper,允许你在没有任何样板代码的情况下持久化数据。 它也可以充当CSV文件的和 ORM 。示例...

    groovy入门经典,groovyeclipse 插件

    groovy入门经典,groovyeclipse 插件

Global site tag (gtag.js) - Google Analytics