GADGET FACTORY 雑記帳

iPhone アプリ / Flash コンテンツ /Adobe AIR などを開発していて気づいたことや備忘録、TIPS、HACKなど

【Flash】getDefinitionByNameで未定義クラスを指定した時のエラー回避

FlashActionScript にて、定義されたクラスをクラス名(String)から呼び出す際に利用するパブリックメソッド

getDefinitionByName

使い方としては、

var className:String = "hoge";
var tmpClass:Class = Class(getDefinitionByName(className));
var tmp:* = new tmpClass();
…

と書けば、そのクラスを親クラスとした、オブジェクトを生成できます。



これは、例えばデータを連番で複数処理する場合も有効で

for(var i:int=0;i<30;i++){
	var className:String = "hoge"+i.toString();
	var tmpClass:Class = Class(getDefinitionByName(className));
	var tmp:* = new tmpClass();
	…	
}

とすれば、hoge0〜hoge29の連番のクラスを元にしたオブジェクトの生成ができます。
複数の異なるクラスをもとにした音データや、ムービークリップデータなどを扱うのに便利。

しかし、例えば、指定されたクラスが定義されていない場合は、未定義クラスの生成時に、エラーが出て止まってしまいます。

呼び出すクラス名をデータで保持していた場合、そのデータの記載が間違っていると、その時点でプログラムは停止してしまいます。
私の場合は、一人でコードもデータも作成しているので、登録と同時にクラスの定義も行うようにすれば、大丈夫なのですが、データ作成者とコード作成者が異なっていた場合、ミスが発生することも考えられます。

あらかじめ、呼び出しクラスがきっちりと定義されているかを確認する方法はないかと調べてみると、以下の形でなんとか動作できました。

// クラスの有無をテストする

var className:String = "hoge";
try{
	var tmpClass:Class = Class(getDefinitionByName(className));
}
catch(e:Error){
	// エラーの場合のコードをここに記載する
	return;	// 処理を終了して戻る
}
// 以下はクラスが存在していた場合の処理
var tmp:* = new tmpClass();
…	

自身の備忘録として残しておきます。