型パラメータとミックスイン

  • Mix.hx
interface A {}
interface B {}
class C implements A, implements B {
	public function new() {}
}
class Mix {
	public static function hoge(x: A) {}
	public static function piyo(x: B) {}
}
  • Hoge.hx
using Mix;
class Hoge {
	public static function main() {
		var c = new C();
		c.hoge();
		c.piyo();
	}
}

こんな感じで、2つ以上のインタフェースに対してミックスインをつけることもできる。

インターフェースが型引数を持っていても、一つなら大丈夫そう。

  • Mix.hx
interface A {}
interface X<T> {}
class C implements X<A> {
	public function new() {}
}
class Mix {
	public static function hoge(x: X<A>) {}
}
  • Hoge.hx
using Mix;
class Hoge {
	public static function main() {
		var c = new C();
		c.hoge();
	}
}


が、下は通らない。

  • Mix.hx
interface A {}
interface B {}
interface X<T> {}
class C implements X<A>, implements X<B> {
	public static function new() {}
}
class Mix {
	public static function hoge(x: X<A>) {}
	public static function piyo(x: X<B>) {}
}
  • Hoge.hx
using Mix;
class Hoge {
	public static function main() {
		var c = new C();
		c.hoge();
		c.piyo();
	}
}
  • 実行
$ haxe hoge.hxml
Hoge.hx:5: characters 2-8 : C has no field hoge

piyo はあるらしい。
どうも、最後の implememt だけ有効みたいだが・・・

えー。