mixinの不具合(JavaFX 1.2.1)

JavaFXではmixinを採用している為、Javaよりも柔軟に機能拡張を行う事ができます。
ですが、まだまだ不安定な状況で言語仕様にも記述されておらず、手探りでやるしかない状況です。また、致命的な不具合もあるようです。
尚、この情報はあくまでJavaFX1.2.1の段階の不具合なので次のバージョンでは改善されている可能性は高いです(既にバグレポートはOpenされている)。

サンプルコード

mixin class Mix {
    public var x = 1;
    public function show() {
        println("Mix: x={this.x} {this}")
    }
}
class Foo {
    public var x = 2;
    public function show() {
        println("Foo: x={this.x} {this}")
    }
}
class Bar extends Foo, Mix {
    postinit {
        Foo.show();
        Mix.show();
        println(Foo.x);
        println(Mix.x);
    }
}
var bar = Bar {
};
(bar as Foo).show();
(bar as Mix).show();
println((bar as Foo).x);
println((bar as Mix).x);

Bar <= Foo + Mix という構成です。

実行結果。

Foo: x=2 snippets.mixin.MixInExample$Bar@35175422
Mix: x=2 snippets.mixin.MixInExample$Bar@35175422
0
2
Foo: x=2 snippets.mixin.MixInExample$Bar@35175422
Foo: x=2 snippets.mixin.MixInExample$Bar@35175422
2
2

関数の方は期待した通りの実行なのですが、変数は明らかにおかしいですね。そもそも0ってなに?という感じです。
また、現状では初期化パラメータでxを指定する事ができません。

var bar = Bar {
     x: 100
};

これは参照が曖昧なため、エラーとなるのは当然ですが、

var bar = Bar {
     Mix.x: 100
};

というように記述しても、JavaFX1.2.1のコンパイラは解釈してくれません。

というわけで、mixinを使うにはまだちょっと早いですというお話でした。