GINA之Groovy的".@"语法
GINA:GroovyInAction
预备知识介绍: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的词法范围内(Insidethelexicalscopeofafield)对实例fieldname或者this.fieldname的引用,将被解释为字段(field)。范围以外的时候,可以通过实例.@fieldname来访问。
结论:将Bean的熟悉信息作为Field(.@语法)也好,Property也好,或者set/get方法也好,都不应该混淆这些入口方法,要保持访问方法的唯一性。
相关推荐
软件的信雅达 2020-11-02
糖葫芦娃哈哈 2020-11-02
淡茶 2020-05-10
PHP学习笔记 2020-03-06
anvien 2020-01-08
quzhongwei 2020-01-06
淡茶 2020-01-03
tysforwork 2019-12-12
简单点好 2013-09-04
PeterHao0 2013-08-31
软件的信雅达 2019-11-19
软件的信雅达 2017-02-11
yiyilanmei 2015-04-28
无聊找点事做 2019-09-06
HaleyJenkins 2016-10-18
PeterHao0 2016-01-22
dieefer 2017-02-11
liushidexing 2016-11-03
春天花会开 2016-11-01