对getter / setter的认识

getter/setter是再简单不过的东西了,很多程序语言中都有。说起来它们的用以就是将属性封装保护起来,而又对外提供一对取值和赋值的方法。 

我是先有的Java基础,再学习Flex里的ActionScript的,最初写VO的时候,根本就没有想什么,直接将JavaBean"翻译"成VO。 

JavaBean: 

    public class MyJavaBean implements Serializable, Cloneable {


        private String str;


        public String getStr() {
            return str;
        }


        public void setStr(String str) {
            this.str = str;
        }
    }

翻译成AS后: 

    [Bindable]
    [RemoteClass(alias="MyJavaBean")]
    
    [Bindable]
    public class MyVO{

        private var str:String;


        public function getStr():String  {
            return str;
        }


        public function setStr(str:String):void {
            this.str = str;
        }
    }

使用起来一切正常。 

但是,在一些书上的代码中都可以看到类似 

As3代码
public function get str():String

这样的代码,开始不太明白这个"get"是怎么回事,是不是印刷的不好,怎么后面有个空格呢?后来,看到很多网上代码也是如此,才特意去找了些资料。 

于是才得知AS里本是这样写getter/setter的 

As3代码
    [Bindable]
    [RemoteClass(alias="MyJavaBean")]
    
    [Bindable]
    public class MyVO{

        private var _str:String;


        public function get str():String  {
            return _str;
        }


        public function set str(str:String):void {
            _str = str;
        }
    }

由于有了get和set这两个关键字,似乎AS这次支持不同参数的同名函数重载了。 
当然,之前我想当然的哪种类似Java的写法也是可以的。不过这两种方式的使用方法可是不同的。第二种方式,在使用的过程中是直接点取属性使用的,就好像这个类中存在一个public的str属性一样: 

As3代码
 myVO2.str = myVO1.str;

这样一来,和直接写成

As3代码
 public var str:String;

还有什么分别呢?(指的是方法中只是直接取值、赋值,没有更多运算的大多数情况下) 

更让我不可思议的是,在一篇课程中居然还写了,Java1.7开始也要变成这样的getter/setter方式了! 我的天呀!! 

直到一天,研究绑定的时候,我希望将画面的控件与VO中的属性绑定。 
当由控件取值给VO时,可以写成 

As3代码
BindingUtils.bindSetter(model.setCode,view.txtCode,"text"); 

但由VO取值给控件赋值时,却怎么也写不出来了,没有bindGetter方法,bindProperty似乎又不好用。明明在函数说明中写着第4个参数可以是getter方法,但死活不灵。 

突然,我意识到了两种getter的写法,如果改用后者,那么自然轻松搞定,因为它用起来本身就好似是public的属性吗。于是才意识到原来类Java写法虽然也兼容(因为他本来就是一种普通的函数的写法),但至少在这里会遇到问题。改吧!那和public属性比起来又有何分别呢?(我这里都是单纯的取值/赋值操作,没有计算) 

后来,终于在一篇讲述BlazeDS的文章中得知,VO的属性用public的,比用getter/setter的速度(与Java通信的速度)要快些,再加之官方的各种例子里都是直接写成public,至此我决定干脆2种getter/setter方法都不用了,VO的属性统统public。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值