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 下。 同理 你可以試一試方法的註解、靜態成員的註解。 注意:靜態成員的反射必須傳入類對象。