JAVA注解是一个非常有用的机制,在不改变代码的情况下就可以轻松为成员增加注解从而实现注入等操作。其实在AS3中也存在这种机制,而且相比JAVA,使用上更为简单。
想要使用注解,首先需要了解下AS3的反射,网络上相关文章大把,这里不再多做陈,仅仅列举出一些方法。
getQualifiedClassName(value:*) ; 获得某个实例或者类对象的完全限定类名。 完全限定类名就是 类的包名 + :: + 类名,
比如 Sprite 类的完全限定类名就是 flash.display::Sprite
getDefinitionByName(value:*); 获得指定的类的类对象引用。 将类的限定名传入即可获得这个类对象
describeType(value:*); 生成一个描述指定对象或类型的描述,格式为XML 。
获取注解最多就使用以上的三个方法,方便吧!
而注解的实现用不需要单独写一个注解类来实现,你直接在现有的AS3代码中直接写一个不存在的的注解即可实现,需要附带参数时只需在注解名后面的括号内定义即可
这是一个AS3的自定义注解:
package com
{
public class Annotation
{
private var _id:String;
public function Annotation()
{
}
[MyAnnotation(a=1,b=2)]
public function get id():String
{
return _id;
}
public function set id(value:String):void
{
_id = value;
}
}
}
在程序入口处写下代码:
var xml:XML = describeType(Annotation);
trace(xml);
输出信息:
<type name="com::Annotation" base="Class" isDynamic="true" isFinal="true" isStatic="true">
<extendsClass type="Class"/>
<extendsClass type="Object"/>
<accessor name="prototype" access="readonly" type="*" declaredBy="Class"/>
<factory type="com::Annotation">
<extendsClass type="Object"/>
<accessor name="id" access="readwrite" type="String" declaredBy="com::Annotation">
<metadata name="MyAnnotation">
<arg key="a" value="1"/>
<arg key="b" value="2"/>
</metadata>
<metadata name="__go_to_definition_help">
<arg key="pos" value="177"/>
</metadata>
<metadata name="__go_to_definition_help">
<arg key="pos" value="240"/>
</metadata>
</accessor>
<metadata name="__go_to_ctor_definition_help">
<arg key="pos" value="95"/>
</metadata>
<metadata name="__go_to_definition_help">
<arg key="pos" value="30"/>
</metadata>
</factory>
</type>
仔细查看就可以发现我们的注解就在字段描述的 metadata 下。 同理 你可以试一试方法的注解、静态成员的注解。 注意:静态成员的反射必须传入类对象。