Groovy Tip 13 “.&”运算符
class
Foo
{
def
hello(name)
{
println
"hello,${name}!"
}
}
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
{
def
static
f()
{
println
'oh,...'
}
}
可以这样来使用:
def
f = Foo.&f
f()
结果为:
oh,...
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!"
}
}
class
World
{
}
Foo foo =
new
Foo()
World.MetaClass.hello = foo.&hello
def
w =
new
World()
w.hello()
运行结果为:
hello,world!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。