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

(转)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模板是一种强大的脚本语言,它在Java平台上运行,并且与Java紧密集成。Groovy以其简洁的语法、动态类型和面向对象特性而受到开发者欢迎,尤其在构建自动化任务、生成代码、创建脚本和模板等方面表现突出。在这...

    Java中使用Groovy的三种方式

    在Java开发中,Groovy是一种强大的、动态类型的脚本语言,它可以无缝地与Java代码集成,为开发者提供了更简洁、灵活的语法。本文将深入探讨在Java项目中使用Groovy的三种主要方式,并阐述它们各自的优势和应用场景。...

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

    Freemarker是一个独立于语言的模板引擎,可用于多种语言,包括Groovy。它的语法简洁,强调可读性和分离关注点。在Groovy中,你可以通过Freemarker API创建模板并填充数据。Freemarker模板由控制结构(如`#if`, `#...

    play!框架学习文档(汉化了一部分)

    5. **标签与参数**:模板中的标签可以带有参数,单个参数可省略名称,多个参数需明确指定。 6. **安全机制**:默认情况下,模板引擎会对内容进行 HTML 转义以防止 XSS 攻击,可以通过 `raw()` 方法禁用转义。 7. **...

    groovy速查手册

    - **从Groovy调用Java**:Groovy完全支持调用任何Java代码,就像在Java中一样直接使用。 - **从Java调用Groovy**:在Java中调用Groovy代码需要确保`groovy-all.jar`在类路径中。具体方法包括: - 使用`groovy.util....

    Groovy语法系列教程之布尔(五).pdf

    本篇教程是关于Groovy编程语言中布尔(Boolean)类型的详细讲解,其中涉及到布尔类型的定义、使用以及Groovy对于布尔值操作的特殊规则。 首先,布尔类型是编程语言中一种基础的数据类型,用于表示逻辑上的真值,...

    Play2模板引擎Japid42.zip

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

    groovy中的特殊注解1

    在Groovy编程语言中,有一些特殊的注解可以增强代码的功能和效率。在这篇文章中,我们将探讨三个关键的注解:`@Canonical`、`@Delegate`和`@Immutable`,它们都是Groovy语言中用于提高代码简洁性和灵活性的重要工具...

    groovy和Java相互调用1

    标题中的“Groovy和Java相互调用1”指的是在编程时如何在Groovy语言环境中调用Java类,以及反之,如何在Java程序中调用Groovy类。这是一种跨语言交互的方式,特别是在混合使用Groovy和Java的项目中非常常见。 ...

    Groovy 动态修改XML

    博客中的作者可能还会讨论如何结合其他Groovy工具,如GPath表达式(用于更方便地查询XML)和Closure(用于定义可重用的代码块),以实现更复杂的XML处理任务。此外,可能还会提到如何在大型项目中使用Groovy来提高...

    groovy入门经典,groovyeclipse 插件

    Groovy还引入了GString,这是一种可变字符串,允许在字符串中嵌入表达式,如`${expression}`。此外,Groovy的运算符重载和元编程能力使代码更加简洁和动态。 在安装GroovyEclipse插件后,开发者可以通过Eclipse的...

    Groovy PPT

    5. **列表、映射、范围和正则表达式的字面量声明**:Groovy提供了一种简洁的方式来声明这些数据结构。 6. **GPath**:GPath是一种高效的对象导航机制,用于简化XML和JSON数据的操作。 7. **GroovyBeans**:...

    Groovy in Action[文字版][中文]

    4. **GString与字符串模板**:Groovy的GString能够方便地进行字符串插值,它允许在字符串中嵌入表达式,使得输出动态内容变得更简单。 5. **Groovy Shell与 Grape**:Groovy Shell提供了一个交互式的环境来执行...

    The Groovy 2 Tutorial(LeanPub)

    5. **断言语句**:Groovy的断言语句用于在开发过程中检查代码的正确性。它会在断言失败时抛出异常。此外,还会介绍如何处理失败的断言。 6. **保留字**:Groovy中的保留字不能被用作变量名或标识符。保留字具有特殊...

    groovy

    5. 容器管理:在Apache Kafka、Cassandra等大数据处理系统中,Groovy用于配置和管理容器。 四、Groovy与Java的交互 由于Groovy和Java都运行在JVM上,两者可以无缝协作。Groovy类可以继承Java类,Java方法可以调用...

    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中文版教程

    此外,Groovy支持闭包,这是一种强大的代码块,常用于函数式编程。 2. **动态类型**:Groovy是动态类型的,这意味着变量的类型在运行时确定,而非编译时。这种特性使得开发过程更为敏捷,减少了类型检查带来的编译...

Global site tag (gtag.js) - Google Analytics