`
TonyLian
  • 浏览: 401028 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【Flex】对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;
        }
    }


使用起来一切正常。

但是,在一些书上的代码中都可以看到类似
public function get str():String

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

于是才得知AS里本是这样写getter/setter的
    [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属性一样:
 myVO2.str = myVO1.str;

这样一来,和直接写成
 public var str:String;

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

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

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

4
0
分享到:
评论
5 楼 TonyLian 2010-12-20  
cnsuifeng 写道
如果使用setter 可以对数据的有效性进行验证  另外还可以对数据的进行一些操作
如果使用public 这些操作要暴露在客户端代码 并且使用这个属性的地方都要进行编写这些代码  不利于封装  这是我的理解 楼主可以交流一下


是的,你说的这些都是JavaBean的优点。
但是,在这个场景下,由于如下三点,我才选择了直接 public :
1)在与BlazeDS的通信时,速度更快
2)目前只是单纯的属性,没有特别的封装需求
3)鉴于官方的例子几乎都是直接public

当然,如果需要封装的特性,还是得用第二种getter/setter的。
4 楼 cnsuifeng 2010-12-05  
如果使用setter 可以对数据的有效性进行验证  另外还可以对数据的进行一些操作
如果使用public 这些操作要暴露在客户端代码 并且使用这个属性的地方都要进行编写这些代码  不利于封装  这是我的理解 楼主可以交流一下
3 楼 chxkyy 2009-07-31  
私有变量必须命名成_* 否则会报错。
private var str:String; 
 
    public function get str():String  { 
        return str; 
    } 
报错。
2 楼 lydawen 2009-03-17  
我也拉们了很久,终于明白这两个写法的区别.
1 楼 天机老人 2008-12-04  
没看懂
不过支持楼主!有空多写点flex的东西哦 !

相关推荐

    Flex Bindable 的用法

    例如,`[Bindable]`元数据告诉Flex编译器,某个变量、属性或getter/setter方法需要支持数据绑定。这意味着当这些元素的值发生变化时,编译器会自动生成相应的事件处理代码,确保与之绑定的其他组件能实时反映这些...

    Flex4-in-a-day

    最后,文档介绍了Flash Builder 4的一些新特性,如状态编辑器、getter/setter/event handler代码生成器、性能分析器和调试器,这些新工具为Flex开发提供了更多便利。 作者介绍了自己是Adobe系统公司的一名平台布道...

    Flex3与Flex4对比

    - **Getter/setter和事件处理函数代码生成**:这些特性在Flex4的高级版本中可用,可以减少手工编写样板代码的工作量。 - **模板支持**:Flex4的高级版本支持模板功能,可以简化常见任务的实现。 - **基于状态的代码...

    Flex与Java通过实体传递数据

    这个类包含了字段和getter/setter方法,用于存储和访问数据。 数据交换通常通过HTTP请求完成,Flex使用HTTPService发送请求到Java服务器,Java服务器处理请求,然后返回响应。响应可以是一个JSON或XML格式的数据,...

    Flex_2_中的元数据标签

    通过对 Flex 2 中元数据标签 `[Bindable]` 和 `[ArrayElementType]` 的详细介绍,我们可以看到这些标签在实际开发中的重要作用。它们不仅可以提高代码的可维护性和可读性,还能帮助开发者更高效地管理和同步数据。...

    as get set类生成工具

    "as get set类生成工具"是一个专门针对ActionScript开发的辅助工具,它旨在帮助开发者快速创建并管理具有getter和setter方法的类。在面向对象编程中,getter和setter方法用于获取(get)和设置(set)对象的属性值,...

    java flex开发项目配置实例

    - `Person.java`:表示个人对象,包含id、name、age、sex和password属性以及相应的getter和setter方法。 - `PersonService.java`:提供获取人员列表的方法,返回一个包含多个Person对象的ArrayList。 2. 在...

    IDE Factory

    1·生成Geter 和Setter以后 如果Format Code 可能会导致生成的Getter 和Setter无法使用 2·会导致Flex Builder 死机(1/4 次数/小时) 【建议】功能还是很强大的,介于FB3做的实在很屎,可以使用FDT或者安装此插件

    flex编码规则

    若变量通过getter/setter方法读写,则其命名应以下划线“_”开头。布尔类型的变量建议以“can”、“is”或“has”开头,以增强语义的明确性。常量则应全部使用大写字母,并以下划线“_”分隔单词。 ### 方法 方法...

    Flex 常见 编码规范

    - 无参数的方法应使用getter/setter形式,如`label`,但计算密集型方法应使用更具描述性的名称,如`findFooBar()`, `calculateFooBar()`。 - 子类覆盖基类方法时,基类方法前加`$`,标记为`final`,仅调用基类方法...

    Flex Data Binding详解

    可以为getter或setter函数添加`[Bindable]`元数据,如: ```actionscript public var ss:Object = {value: "aaa"}; [Bindable] public function get gg():String { return ss.value; } public function set gg...

    Flex连接数据库三种方法.doc

    创建一个公告类(NoticeInfo),包含属性如title、author、content和date,并提供getter和setter方法。接着,编写一个服务类(如DataServiceImpl),使用Java的JDBC库连接到SQLServer数据库,执行SQL查询,将查询...

    flex+AS3编程规范

    无参方法推荐实现为getter/setter。覆盖基类方法时,在基类方法名前加`$`符号,子类方法需标记为`final`,仅用于调用基类方法。 #### 六、事件处理器与参数命名 **事件处理器命名:** 后缀添加`Handler`,如`...

    flex试题打包面试题挺好的

    - **步骤三**:定义数据成员,并提供getter/setter方法。 - **步骤四**:重写`toString()`和`clone()`方法。 ### 13. 获取运行环境信息 - **示例**:获取操作系统信息。 ```actionscript flash.system....

    Flex滤镜效果

    6. **getter和setter方法**:提供对目标图形的访问。 #### 结论 通过上述示例代码,我们了解了如何在Flex中实现基本的滤镜切换效果。这种技术不仅可以用来美化用户界面,还可以提高应用程序的互动性和用户体验。...

    flex数据绑定的原理

    当我们使用`[Bindable]`元数据标签标记一个类的成员变量时,Flex编译器会自动为这个变量生成相关的访问器(getter和setter)。例如,在提供的代码段中,`list`变量被标记为`[Bindable]`: ```actionscript public ...

    Flex 3 基础教程4)

    - 当应用于整个类时,称为对象级别绑定,类中的所有公有变量和具有 setter/getter 的函数都可用于绑定。 此外,Flex 还提供 `BindingUtils` 工具类,用于执行动态绑定操作,例如 `BindingUtils.bindProperty(source...

    构建Flex4为前端的Java EE项目

    2. **定义Employee类**:在com.sample包下创建Employee类,包含姓名(name)、年龄(age)和电子邮件(email)等属性及其相应的getter和setter方法。 3. **创建EmployeeService类**:同样位于com.sample包下,定义...

    flash build 4.5 (flex4.5) 开发中文文档(flex4.5_help 中文翻译版)

    - **代码模板**: 自动生成常用的代码结构,如 getter/setter 方法。 - **元数据代码补全**: 支持 Flex 元数据的自动完成。 - **语法错误检查**: 实时检测并标注代码中的语法错误。 - **查找引用**: 快速定位代码中的...

Global site tag (gtag.js) - Google Analytics