ClassFactoryの罠

罠というか、もともとBeanに対して想定されてるものをJavaのリフレクションのように使っちゃおうという魂胆ではじめたことなので諦めるしかないというかなんというか。
ClassFactory.propertiesを使えばインスタンス生成時に値を渡せることがわかったので早速つかってみようとしたけどなんかうまく渡されてない。というわけで実験コードを書いてみた。

wonderflへのリンクとコード
wonderfl build flash online | 面白法人カヤック

package {
    import flash.display.Sprite;
    import flash.text.*;
    import flash.utils.*;
    import mx.core.*;
    
    public class FactoryTest extends Sprite {
        public function FactoryTest() {
            var f : ClassFactory = new ClassFactory(A);
            f.properties = {b_ : "A"};
            var a : A = f.newInstance() as A;
            
            var tf : TextField = new TextField();
            tf.appendText(a.b_ + "\n" + a.bb);
            addChild(tf);
        }
    }
}

internal class A {
        public var bb : String = "B";
        public var b_ : String = "C";
        
        public function A(b : String = "D"){
            bb = b_;
        }
}

同じファイルに二つ以上のclassを書くにはpackageの外に出してinternalにすればいいんだね。(参考:http://www.judahfrangipane.com/blog/?p=60)

これを実行すると、

A
C

と出る。つまり、aのコンストラクタが実行された後にa.b_に値が代入されているということになる。てっきりコンストラクタの前に渡すものだと思ってたから変になってしまったんだな。