总结:

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

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

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

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


声明:

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

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

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

引用:http://www.cnblogs.com/cj723/archive/2007/03/22/683951.html (C#的反射)

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

题外话:

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

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

何乐而不为呢?

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

-------zhongxia


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

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

1、获取控件的类名

2、反射得到相对应的类

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

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

var controlType:String = datas[].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(,json.length-);

  json += "}";

  return json;

}

题外知识:

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

【教程】【FLEX】#004 反射机制的更多相关文章

  1. JAVA反射机制教程-获取类对象

    1. 什么是类对象 类对象,就是用于描述这种类,都有什么属性,什么方法的 2. 获取类对象 获取类对象有3种方式(1). Class.forName(2). Hero.class(3). new He ...

  2. Java基础教程——反射机制

    Java反射机制 Java反射机制是Java语言的一个重要特性,使得Java语言具备"动态性": 在运行时获取任意一个对象所属的类的相关信息; 在运行时构造任意一个类的对象: 在运 ...

  3. Java 类反射机制分析

    Java 类反射机制分析 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某 ...

  4. 【Java入门提高篇】Day13 Java中的反射机制

    前一段时间一直忙,所以没什么时间写博客,拖了这么久,也该更新更新了.最近看到各种知识付费的推出,感觉是好事,也是坏事,好事是对知识沉淀的认可与推动,坏事是感觉很多人忙于把自己的知识变现,相对的在沉淀上 ...

  5. 关于Java的反射机制,你需要理解这些..

    转载请标明出处: http://blog.csdn.net/forezp/article/details/53730429 本文出自方志朋的博客 反射机制是在运行状态中,对于任意一个类,都能够知道这个 ...

  6. DirectX11--深入理解Effects11、使用着色器反射机制(Shader Reflection)实现一个复杂Effects框架

    前言 如果之前你是跟随本教程系列学习的话,应该能够初步了解Effects11(现FX11)的实现机制,并且可以编写一个简易的特效管理框架,但是随着特效种类的增多,要管理的着色器.资源等也随之变多.如果 ...

  7. 读懂框架设计的灵魂—Java反射机制

    尽人事,听天命.博主东南大学硕士在读,热爱健身和篮球,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收录于 CS-Wiki(Gitee 官 ...

  8. Java学习之反射机制及应用场景

    前言: 最近公司正在进行业务组件化进程,其中的路由实现用到了Java的反射机制,既然用到了就想着好好学习总结一下,其实无论是之前的EventBus 2.x版本还是Retrofit.早期的View注解框 ...

  9. 第28章 java反射机制

    java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...

随机推荐

  1. Sass进阶之路,之一(基础篇)

    Sass 学习Sass之前,应该要知道css预处理器这个东西,css预处理器是什么呢? Css预处理器定义了一种新的语言将Css作为目标生成文件,然后开发者就只要使用这种语言进行编码工作了.预处理器通 ...

  2. jQuery操作<input type="radio">

    input type="radio">如下: <input type="radio" name="city" value=&qu ...

  3. Angular的表单组件

    创建表单元素 在上一节中,我们学习了如何创建一个组件login,现在将login改造一下, 在template中添加html表单元素,#usernameRef表示input元素id,如果想传递inpu ...

  4. 安装完xampp启用时,计算机中丢失api-ms-win-crt-conio-l1-1-0.dll怎么办?

    安装完xampp启用时,计算机中丢失api-ms-win-crt-conio-l1-1-0.dll怎么办 api-ms-win-crt-conio-l1-1-0.dll 第一步:我们需要下载缺失的这个 ...

  5. 使用CSS进行定位

    CSS中通过使用position属性,有4种不同类型的定位方式,这会影响元素框生成的方式. position属性值的含义: static:静态定位 元素框正常生成.块级元素生成一个矩形框,作为文档流的 ...

  6. Tomcat配置列表显示

    找到tomcat安装的conf文件下的web.xml文件 C:\Program Files\Apache Software Foundation\Tomcat 8.0\conf\web.xml 打开后 ...

  7. 封装framework注意点

    1.新建一个framework过程: . 2.在工程内新建一些类,注意,使用xib时初始化必须要加上loadnib:,否则会造成xib无效(可能是因为没有加载) 如下: JFViewControlle ...

  8. 数组原型方法调用及函数apply调用时 类数组参数在IE8下的问题

    当函数以 apply 方式调用时, 传参方式是一个由各个参数组成的数组或类数组(一个有length属性的对象),传入参数个数取决于 length 的值,例如,某个对象 args.length=3; a ...

  9. css-扩展选择器

    (1)关联选择器 <div><p>aaaaaaaaaaaa</p></div> * 设置div标签里面p标签的样式,嵌套标签里面的样式 div p{ b ...

  10. js面向对象设计之class中一些坑和技巧

    this的指向 super 类工厂,类中定义方法名时,可以使用字符串,这就可以创建工厂函数(类似模板类) Generator 函数 静态属性和私有属性.私有方法 new.target