`

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学习笔记

    Groovy学习笔记,内容如下: 1.概念 2.基本语法 3.字符串 4.集合 5.类和闭包 6.控制语句 7.操作符重载 8.I/O操作 9.高级应用 10.正则表达式

    groovy_jvm_talk

    对象实例化没有隐私修饰符会发生什么? 操纵集合 Java互操作 确定要运行的方法:编译时间与运行时 时髦的弦 基准测试-运行时绑定与静态绑定 议程 简介(约翰) 设置上下文。 什么是Groovym趋势(github,google)...

    compositor(UI编辑开发) v0.4 最新版

    compositor是一款非常方便的编程软件,不仅具有便捷的操作方式更有丰富的功能以及全新的编程模式选择带来...你描述你的UI,然后写一个应用程序来处理UI输入,描述符是XML,应用程序是一个Java/Groovy/Scala/Kotlin类

    kubernetes-operator:Kubernetes本地Jenkins运算符

    初赛考虑到此操作符是为管理Jenkins的实例而创建的,因此重要的是要了解和都是CasC( )。 Jenkins管道使用用编写的脚本,这些脚本有助于Jenkins的CasC方面。 Jenkins使用诸如CasC之类的通过执行各种Jobs并为CI / CD...

    dos基础命令大全介绍

    该pdf全面介绍的dos命令基本操作,介绍了内部命令、外部命令、单符号和多符号,以及8种比较重要的命令操作符

    Maven权威指南 很精典的学习教程,比ANT更好用

    Maven权威指南 Authors Tim O'Brien (Sonatype, Inc.) , John Casey (Sonatype, Inc.) , Brian Fox (Sonatype, Inc.) , Bruce Snyder () , Jason Van Zyl (Sonatype, Inc.) , Juven Xu () Abstract ...

    Compositor:一种为桌面应用程序生成用户界面的简单方法。-开源

    将桌面应用程序的外观与工作方式分开,可以使代码更简洁,而Compositor则使此操作变得容易。 您描述您的UI,然后编写一个应用程序来处理... 描述符是XML,应用程序是Java / Groovy / Scala / Kotlin类。 新闻:0.4发布

    Spring中文帮助文档

    3.12.6. 用注解提供限定符元数据 3.13. 注册一个LoadTimeWeaver 4. 资源 4.1. 简介 4.2. Resource接口 4.3. 内置 Resource 实现 4.3.1. UrlResource 4.3.2. ClassPathResource 4.3.3. FileSystemResource ...

    Spring API

    3.12.6. 用注解提供限定符元数据 3.13. 注册一个LoadTimeWeaver 4. 资源 4.1. 简介 4.2. Resource接口 4.3. 内置 Resource 实现 4.3.1. UrlResource 4.3.2. ClassPathResource 4.3.3. FileSystemResource ...

    javaSE代码实例

    9.3.4 接口中方法无法使用的修饰符 165 9.4 接口与抽象类 166 9.4.1 语法上的不同 167 9.4.2 具体含义的不同 167 9.5 基于接口的多态 169 9.6 接口与回调 170 9.7 instanceof的使用 172 9.7.1 基本...

Global site tag (gtag.js) - Google Analytics