Groovy Tip 13 “.&”运算符
来源:互联网 发布:java 并发 编辑:程序博客网 时间:2024/05/22 15:04
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,可以复合等等。
- Groovy Tip 13 “.&”运算符
- Groovy Tip 4 对象非空判断及“?”运算符
- Groovy Tip 7 “<<”操作符
- Groovy Tip 15 “*”操作符
- Groovy Tip 17 “*.”操作符
- groovy运算符
- groovy运算符重写
- Groovy Tip 5 数组
- Groovy Tip 8 GroovyBean
- Groovy Tip 14 Assert
- Groovy Tip 28 Gpath
- Groovy Tip 5:数组
- C# Tip -- 巧用??运算符
- Groovy Tip 27 Groovy语言对一些常用操作符的扩展
- Groovy Tip 30 BigDecimal数据类型
- Groovy Tip 31 Map拾遗
- Groovy Tip 35 正则表达式
- Groovy Tip 36 “in”关键字
- [AJAX] Ajax的优点评论二
- lint使用简介
- 第一个servlet程序
- java常用数据库的链接方法
- 什么是SOA?
- Groovy Tip 13 “.&”运算符
- VC数字图像处理编程讲座之四
- 成功配置tomcat的log4j日志系统,格式:HTML+每天以yyyy-mm-dd.log命名的日志文件
- css 表格隔行换色
- 总线介绍
- VC数字图像处理编程讲座之五
- (转)Java编程31条规则
- CSDN的SNS实在棒的没得说。。。
- eclipse的一些快捷键