博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【教程】【FLEX】#004 反射机制
阅读量:6984 次
发布时间:2019-06-27

本文共 1958 字,大约阅读时间需要 6 分钟。

总结:

目前用到反射的主要有两个方法

  1.  getDefinitionByName    //根据类名,返回对象(反射实例化对象)

        2.  describeType                 //根据对象,返回XML格式的属性,方法等信息(反射得到对象的属性和方法)

3.  这两个混用,根据一个类名,获取它的所有属性、方法(不包括 private,protected,  [Bindabel] 修饰的 || static 的属性,直接传入类名,就可以获取到)


声明:

由于刚接触Flex不是很久,所以对Flex不是很了解。反射这一块,了解的不是很深。只够 基本的应用。

如果有什么地方有问题,请指出来。   谢谢。

Q:什么事件,事件的作用?

引用: (C#的反射)

(PS:这个博主,是参照 《大话设计模式》里面的,不过博主把代码也粘上去了,方便看源代码。)

题外话:

说到大话系类的书籍,我还是很喜欢的。看这种书籍,就像看故事一样,不会累。而且一个个故事又何尝不是一个个实际中使用例子呢?

所以,看的轻松,又可学习到如何运用,在上面场景应用,有什么好处?

何乐而不为呢?

不过学习还是需要耐心的。再好的书籍也是只是一个引导,需要自己的努力。

                                                                                                                    -------zhongxia


公司有一个项目,需要根据控件的类名(eg: mx.controls.Button,这些类名是存放在数据库中)来生成相对应的控件。

 

实现思路(简单的思路,勿吐槽):

    1、获取控件的类名

    2、反射得到相对应的类

    3、生成相对应的控件,添加到面板中

代码例子(片段): 根据类名(字符串),实例化一个类

var controlType:String = datas[0].Appoint;   //获取控件类名,data是数据库读出来的数据var classRefrence:Class = getDefinitionByName(controlType) as Class;  //反射成对应的类var control:UIComponent = new classRefrence() as UIComponent;       //实例化控件this.addChild(control);       //添加控件到面板中(Flex3.0的方法,Flex4.0需要用  addElement(control); )

反射当然不是只有上面这个小伎俩啦,反射还可以做到:1、反射出这个类的所有方法 (公有的)  2、反射出方法,并执行它。 etc....

一个常用的反射类。(想了解源代码,请下载该文件,研究研究。简单的反射机制就有了点了解。)

地址:【Flex资源】#500 常用反射类

里面提供的方法:

1、传入一个对象,获取类名

2、传入类名和属性名,获取属性值

3、传入类名,方法名,和参数,然后执行这个方法。

4、获取一个对象的所有方法(公有的)。

5、获取一个对象的所有属性(公有的,[Bindabel]也获取不到)。


上面直接放了一个代码文件,看代码还需要下载下来,比较麻烦。所以这边粘一个获取所有公有属性的方法出来。

方便阅读。

采用的是describeType的方法。

/** * 传入一个对象,获取这个对象里面的所有属性,并返回JSON格式的字符串 * @time  2014年12月27日 21:29:45 * */public function getJsonFromObject(obj:Object):String{  if(obj == null)  {     return "";  }  var json:String ="{
"; var properties:XMLList = describeType(obj).variable; for each(var property:XML in properties){ //@ 是出现在flex解析xml时用到,非XML无法使用,会报错 // @指属性,不加@的是指其子节点 var propertyName:String = property.@name; json += "\"" + propertyName + "\":\"" + obj[propertyName] + "\","; } json = json.substr(0,json.length-1); json += "}"; return json;}

题外知识:

 

Flex 中 @的含义:注意,只有解析XML的时候才可以用(尝试解析过Object对象,报错)

 

转载于:https://www.cnblogs.com/zhongxia/p/4190013.html

你可能感兴趣的文章
JVM是怎么判断不可用对象的
查看>>
Tornado使用mako 模板总结
查看>>
用python 登录 ssh 与 sftp 通过证书登录系统
查看>>
tpcc的测试
查看>>
批处理延时启动的几个方法
查看>>
Struts 体系结构与工作原理(图) .
查看>>
vim + cscope + kscope
查看>>
[Android] android的消息队列机制
查看>>
Xampp中的apache,tomcat无法启动的问题
查看>>
Oracle中表被删除或数据被错误修改后的恢复方法
查看>>
常见TCP端口号
查看>>
请不要轻易使用 is_numberic 加入存在E字母
查看>>
linux下svn迁移
查看>>
android studio下NDK开发
查看>>
SpringBoot基础篇配置信息之配置刷新
查看>>
第十一天:find
查看>>
golang sync WaitGroup
查看>>
使用graphite和grafana进行应用程序监控
查看>>
github推送错误:已经有此代码,不允许覆盖的解决方法
查看>>
C#MysqlHelper
查看>>