元数据有如下几个用途:
- 提供给编译器使用,用于配置改变原有的代码行为,如Bindable、Embed、SWF等。
- 提供给IDE使用,让IDE能够给出更加人性化的帮助信息,如Exclude、Deprecated、Inspectable等。
- 为代码提供配置信息,结合程序的反射机制,可以从宏观上对程序行为进行干预,比如一些第三方框架提供的metadata。
自定义元数据的用处主要是用于上面提到的第三点,Flash的元数据无需定义,只需要在编译时加上对你使用的元数据的支持即可(这是因为在发布成正式版SWF时,metadata会被当做注释清理掉),如@刘锡涛所说。如果需要IDE提示,可使用4.5.1以上的FlexSDK,并模仿SDK内提供的metadata.xml编写自己的metadata.xml编译进一个独立的SWC里并引入到你目前开发的项目中,Flashbuilder会根据该配置文件提供代码提示功能。
在使用上,可以通过describeType对一个类或对象进行解析,从中提取metadata信息并对标注了的成员进行控制。举个例子:
如果你希望Base和Base的子类的实例被放置到舞台后,每5秒钟执行一次被标记了Interval的函数,就可以在Base里面加入对this的解析(当然通过宏观监听addedToStage事件的捕捉过程也可以,一般的框架也采用这种办法),找到被标记的函数,然后在addedToStage事件加上一个间时执行被标记函数的侦听器,就可以了,这样所有继承自Base的类的实例都可以支持Interval标签,而不需要写额外的逻辑来控制。
Flash的metadata和Java的Annotation是类似的技术,然而功能稍弱,也不是强类型,解析控制都没有Java来的方便,然而适当使用可以降低代码的复杂度,提高代码质量,同时用的时候也要谨慎,因为涉及到反射,对效率有很大的影响。