`

Groovy “<<”操作符"

 
阅读更多
“<<”操作符在Java语言里被我们熟知的是位运算中的左移运算符。在Groovy语言里,它依然是左移运算符,这我们都很熟悉,在这里就不再多说。而我们要说的却是除此之外,在Groovy语言里为“<<”运算符新增的功能。
一.对List对象和Set对象的操作
对于List对象,在前面的文字里我们提到过:
       def list = ['a','b','c']
 
       list.each{
       println it
    }
 
       println'-----------------------'
       list<<'e'
       list<<'f'
       list<<"haha"
      
       list.each{
           println it
    }
 
不错,我们在Groovy语言里,使用“<<”运算符取代了Java语言中List类的add方法,带来了编码方面的简单和快捷。上面代码的输出结果为:
a
b
c
-----------------------
a
b
c
e
f
haha
 
除了List对象外,“<<”操作符同样能够Set对象提供add功能,请看下面的例子:
       def set = ['a','b','c'as Set
      
       set.each{
           println it
       }
 
       println'-------------------------'
       set<<'i'
       set<<'j'
       set<<'b'
      
       set.each{
           println it
    }
 
为Set对象add元素同样简单,下面是它的输出结果:
a
c
b
-------------------------
i
a
c
j
b
 
为了验证Set对象的特性,我特意给set对象多add了一个“b”字符串,最后打印的结果证明了Set对象的特性:1.没有顺序;2.没有重复的元素。
 
二.对StringBuffer对象的操作
在Java语言中,对StringBuffer对象的操作如下:
       StringBuffer sb = new StringBuffer()
       sb.append('I can say my ')
       sb.append('a')
       sb.append('b')
       sb.append('c')
      
    System.out.println(sb.toString())
 
打印结果为:
I can say my abc
 
Groovy语言中,同样是使用“<<”操作符来对append方法进行简化的:
       def sb = new StringBuffer()
 
       sb<<'I'
       sb<<' can say'
       sb<<' my a'
       sb<<'b'
       sb<<'c'
      
    println sb.toString()
 
打印结果为:
I can say my abc
 
 
三.对流对象的操作
在Java语言中,对流对象的操作通常是read和write,请看下面的例子:
       try
       {
           OutputStreamWriter wtr= new OutputStreamWriter(new FileOutputStream("TheOutput.txt"));
           wtr.write("abc");
           wtr.close();
       }
       catch(Exception e)
       {
           e.printStackTrace();
    }
 
而上面的例子在Groovy语言中将是下面的样子:
       def wtr= new OutputStreamWriter(new FileOutputStream('TheOutput.txt'))
       wtr<< 'abc'
    wtr.close()
 
不错,是使用“<<”操作符代替了write方法。
 
四.其他
除了上面的一些对“<<”操作符的常用方法,在Groovy语言中,还有一些不常用的地方也会使用到“<<”操作符。请看下面的例子:
class Empl {
   
    String name
 
 staticvoid main(args) {
      
       Empl.metaClass.nameInUpperCase << {-> delegate.name.toUpperCase() }
       def b = new Empl(name:"Tom")
 
       println b.nameInUpperCase()
      
   
 }
 
}
 
在这里,“<<”操作符是赋值的意思,即将后面的闭包赋给Empl.metaClass.nameInUpperCase。整个语句与下面的语句等同:
 
Empl.metaClass.nameInUpperCase = {-> delegate.name.toUpperCase() }
分享到:
评论

相关推荐

    Groovy Language Documentation Version 2.5.5

    Groovy 2.5.5版本的官方文档是一个详细的手册,其内容涵盖了从基础语法到高级特性,包括语言规范、程序结构、操作符、对象导向编程和类型系统等方面。以下是对文档内容的详细解读: 1. Groovy语言规范(Groovy ...

    groovy in action 中文版 2017.11

    Groovy还提供了重载操作符的能力,允许程序员为基本数据类型或自定义类型编写新的操作符行为。在字符串处理方面,Groovy引入了GString,这种字符串可以包含表达式,能够在运行时被评估。同时,Groovy还引入了对正则...

    groovy

    4. GString:类似于Java的字符串,但支持占位符表达式,使字符串操作更便捷。 5. 链式调用:对象属性和方法可以连续调用,如`object.property.method()`,增强了代码的可读性。 三、领域应用 1. 脚本和自动化:...

    groovy速查手册

    它具备完全的对象导向性、可选的类型系统、操作符定制能力、简洁的数据类型声明、闭包(Closures)、范围表达(Ranges)、紧凑的属性语法以及与Java的无缝集成等特点。这些特性使得Groovy不仅能够作为脚本语言使用,...

    groovy中map的基本操作1

    这个Map实际上是一个`HashMap`实例,可以通过`instanceof`操作符进行验证,如`assert map instanceof HashMap`所示。同时,我们可以通过`size()`方法检查Map中的键值对数量,这里`assert map.size() == 3`确认Map...

    groovy-all-2.4.8.jar

    - 引入了新的语法特性,比如空安全操作符,使得处理null值更加安全。 - 性能优化,提升了Groovy代码的执行效率。 - 支持Java 8的新特性,如Lambda表达式和默认方法。 4. **使用Groovy-All-2.4.8.jar** - 在Java...

    groovy正则表达式基础1

    然而,Groovy的语法糖使得正则表达式的使用更加简洁,如`~`和`/`的使用,以及`==~`操作符。 6. **实例应用** - 自动化构建工具Gradle:Gradle的构建脚本是用Groovy编写的,这意味着在配置文件中可以利用Groovy的...

    groovy-api-chm

    "groovy-api-1.7.2.chm" 文件包含了Groovy核心API的详细文档,涵盖了Groovy的基础类、语法特性、内置类型以及各种操作符。这些API包括了GroovyObject接口,它是所有Groovy类的基类,提供了诸如`invokeMethod`和`...

    Z2-Groovy in Action.pdf

    Groovy语言的基础涉及了代码的结构、注释、数据类型、操作符重载以及类的声明等方面。Groovy的代码风格倾向于简洁和表达式丰富,例如在Groovy中可以直接使用true或false作为条件表达式,这是Groovy的动态类型特性之...

    groovy文档

    Groovy的集合类型包括ranges(范围)、lists(列表)、maps(映射)等,它们提供了丰富的操作符和方法,使得数据结构的操作变得简洁而高效。Groovy的集合类型还支持并行操作,提高了处理大量数据时的性能。 ### ...

    Groovy.in.Action.2nd.Edition.pdf

    - Spreads操作符(*),支持可变数量的参数传递给方法。 - 自定义Trait,允许开发者组合和重用接口和类中的方法。 3. GroovyBeans和属性:Groovy对JavaBean进行了扩展,增加了更简洁的属性访问方式,允许在不定义...

    groovy api 资料 自学文档

    - 链式方法调用:通过`.`操作符可以连续调用对象的方法,使得代码更简洁。 - Map和List的简写:Groovy可以用`[key1: value1, key2: value2]`创建Map,用`[value1, value2, ...]`创建List。 3. **Groovy的集合操作...

    rxjava-groovy-0.7.0.zip

    Groovy的语法糖使得使用RxJava变得更加简单,例如,Groovy的闭包可以直接作为操作符传递,使得链式调用更加直观。同时,Groovy的元编程特性允许我们在运行时动态地扩展类和方法,这在处理RxJava的 Observable 和 ...

Global site tag (gtag.js) - Google Analytics