GINA之Groovy的".@"语法

GINA:Groovy In Action
预备知识介绍:Groovy的Bean,可以直接定义其属性,而不需要象Java那样有对于的get/set方法(其实Groovy在背后已经偷偷的帮你完成)。比如
// Java
public class MyBean implements java.io.Serializable {
private String myprop;
public String getMyprop(){
return myprop;
}
public void setMyprop(String value){
myprop = value;
}
}

对应的Groovy代码只需这样即可
class MyBean implements Serializable {
String myprop
}

    再看如下代码
class DoublerBean {
public value
void setValue(value){
this.value = value
}
def getValue(){
value * 2
}
}
def bean = new DoublerBean(value: 100)
assert 200 == bean.value
assert 100 == bean.@value

    首先11行的bean.value将调用getValue并且返回双倍的value值,但请注意第7行的代码显示,如果此处的value也是getValue调用的话,那将得到一个无穷尽的递归调用。同理setValue也是。
    因此引出Groovy的Bean规则:在field的词法范围内(Inside the lexical scope of a field)对实例fieldname或者this.fieldname的引用,将被解释为字段(field)。范围以外的时候,可以通过实例.@fieldname来访问。
    结论:将Bean的熟悉信息作为Field(.@语法)也好,Property也好,或者set/get方法也好,都不应该混淆这些入口方法,要保持访问方法的唯一性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值