`
ihuashao
  • 浏览: 4664319 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Groovy Tip 13 “.&”运算符

阅读更多
Groovy Tip 13 “.&”运算符
在Groovy语言中,“.&”运算符是用来引用一个方法,请看下面的例子:
class Foo
{
def hello(name)
{
println"hello,${name}!"
}
}
通常,我们是这样来使用Foo类的hello方法:
Foo foo = new Foo()
foo.hello('world')
现在,我们在Groovy语言里也可以这样使用:
Foo foo = new Foo()
def hello = foo.&hello
hello('Tom')
语句“def hello = foo.&hello”的意思是定义一个“hello”对象,并且将它指向“foo”对象的“hello”方法。然后,我们就可以直接使用刚刚定义的“hello”对象。上面的代码的结果为:
hello,Tom!
静态方法也可以使用.&”运算符来引用,如下:
class Foo
{
defstatic f()
{
println'oh,...'
}
}
可以这样来使用:
def f = Foo.&f
f()
结果为:
oh,...
简单的介绍到此为止,下面来说说如何在实际的代码中使用它。在实际的编码过程中,记录log是免不了的了。如下:
if (logger.isDebugEnabled()){
logger.debug("updateNullCRTarget condition:");
logger.debug("year=" + year);
logger.debug("type=" + mytype);
logger.debug("buyer=" + buyer);
}
如果你写“logger.debug”写烦了,不如这样实现:
def debug = logger.&debug
if (logger.isDebugEnabled()){
debug("updateNullCRTarget condition:");
debug("year=" + year);
debug("type=" + mytype);
debug("buyer=" + buyer);
}
如果上面的样子看着不舒服,也可以这样实现:
def debug = logger.&debug
if (logger.isDebugEnabled()){
debug "updateNullCRTarget condition:"
debug "year=$year"
debug "type=$mytype"
debug "buyer=$buyer"
}
实际的编码过程中可能有很多这样的例子,你会在一段代码中不断的调用另外一个类的方法,如果你讨厌不停的写“对象名.方法名”或者“类名.方法名”,那么你就可以使用上面的方法。
.&”运算符的第二个用途是委派功能。我们知道,我们如果想要在一个类中使用另一个类的功能,最直接的方法是继承。但我们在很多时候都指出,过多使用继承会导致很多的副作用。在Groovy语言中,我们常常使用委派来代替继承。
.&”运算符也能实现功能的委派,而且是动态委派的基础。下面,我们来看看它是如何实现委派的:
class Foo
{
def hello()
{
println"hello,world!"
}
}
下面有一个World类:
class World
{
}
可以看到,World类没有任何的方法,它现在想继承Foo类的hello方法。
Foo foo = new Foo()
World.metaClass.hello = foo.&hello
def w = new World()
w.hello()
运行结果为:
hello,world!
.&”运算符除了上面的用法,我们还需要记住的是,形如“def hello = foo.&hello”的语句同时也声明了“hello”对象是一个闭包,闭包的任何用法都可以使用在“hello”对象上,如可以把它当对象一样传递,可以curry,可以复合等等。
分享到:
评论

相关推荐

    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-3.0.jar

    Groovy jar包 3.0.

    org.codehaus.groovy-2.9.0.xx-201407142235-e44-RELEASE-updatesite.zip

    标题 "org.codehaus.groovy-2.9.0.xx-201407142235-e44-RELEASE-updatesite.zip" 暗示了这是一个与Groovy编程语言相关的Eclipse插件的更新站点压缩包。这个版本号 "2.9.0" 表明这是该插件的2.9.0版,时间戳 ...

    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-all.jar-生成JasperReport所要包含的包

    `groovy-all.jar`是Groovy库的一个集合,包含了Groovy运行时环境和所有必要的类库,使得开发者能够在Java项目中方便地使用Groovy的功能。 在Java开发中,`groovy-all.jar`是至关重要的,因为它允许你在Java应用程序...

    groovy-1.0.jar

    groovy-1.0.jar ireport jasperreport

    Packtpub.Groovy.for.Domain.Specific.Languages.Jun.2010.rar

    《Packtpub.Groovy.for.Domain.Specific.Languages.Jun.2010》这本书主要聚焦于Groovy语言在领域特定语言(DSLs)中的应用,这是2010年6月出版的一份专业资源。Groovy是一种动态、灵活的编程语言,它为Java平台带来...

    Flutter 出现Could not download groovy-all.jar (org.codehaus.groovy:groovy-all:2.4.15)

    在一次代码拉取中,出现了以下问题:Could not download groovy-all.jar (org.codehaus.groovy:groovy-all:2.4.15) 详细的报错信息如下: // 报错信息如下 Could not resolve all files for configuration ':jcore-...

    Groovy学习笔记.pdf

    Groovy是一种动态、灵活的编程语言,它是Java平台上的一个主要补充,特别是在脚本编写和快速原型设计方面表现突出。Groovy结合了Python、Ruby和Smalltalk等语言的特性,并与Java无缝集成,使得开发者可以在Java应用...

    Apress.Beginning.Groovy.and.Grails.From.Novice.to.Professional.Jun.2008

    《Apress.Beginning.Groovy.and.Grails.From.Novice.to.Professional.Jun.2008》这本书深入浅出地介绍了Groovy语言和Grails框架,旨在帮助初学者快速掌握这两项技术并转化为专业人士。Groovy和Grails是Java生态中的...

    cucumber-groovy-1.1.1.zip

    【标题】:“Cucumber-Groovy-1.1.1.zip” 这个压缩包“cucumber-groovy-1.1.1.zip”包含了Cucumber的一个版本,它是一个自动化测试工具,专为集成行为驱动开发(BDD)到Groovy编程语言中而设计。Cucumber允许...

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

    elasticsearch-lang-groovy-1.2.0.jar

    jar包,官方版本,自测可用

    elasticsearch-lang-groovy-1.4.0.jar

    jar包,官方版本,自测可用

    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.in.Action.2nd.Edition.pdf

    Groovy是一种基于JVM的敏捷开发语言,由James Strachan于2003年启动,并迅速成为Java平台上的一个流行语言。Groovy提供了一种动态类型语言的语法,同时兼容Java语言的静态类型能力,使得它能够在JVM上无缝运行。 ...

    高版本jdk适应groovy的jar包.zip

    csdn这样自己涨积分真麻烦,居然要50积分,我自己都下不起了好么,,调整为5个积分 ---------------2020-11-13----------- jdk版本高于9时,groovy无法正常使用,需要将此jar包加入项目中,即可正常打开.

Global site tag (gtag.js) - Google Analytics