ActionScript 2.0のinterfaceに関するバグです。クラスのメソッドにObject型の引数として、interfaceで型指定した値を渡すと、シンタックスエラーが発生します。
クラスを、つぎのように定義します。型指しているinterfaceにはとくに条件がなく、空でも問題は再現します。
// ActionScript 2.0クラス定義ファイル: MyClass.as
class MyClass {
function receiveInterface(obj:MyInterface):Void {
receiveObject(obj); // インタフェースで型指定したデータを引数に渡す
}
function receiveObject(obj:Object):Void {}
}
// ActionScript 2.0インタフェース定義ファイル: MyInterface.as
interface MyInterface {}
インタフェースで型指定したデータを、メソッドにObject型の引数として渡しても、型チェックでは適合するはずです。ところが、[シンタックスチェック]またはコンパイル(SWF書出し)を行うと、「タイプが一致しません」というエラーが発生します。
図■表示されたスクリプトエラー
Macromediaでは、この問題をすでにバグとして確認しているとのことです。したがって、近い将来に修正される可能性はあります。当面は、メソッドの引数に型指定をしないか、引数を渡すときにObjectでキャストする必要があるでしょう。
この記事へのコメント
●1.oshige(2004年03月25日 17:56)
上のサンプルのクラス定義は間違ってませんか?
肝心のインタフェースを使ってないのでは?
class MyClass implements MyInterface {
implementsいらないの?
でも、これでも試した結果は同じエラーが出ます。
●2.野中文雄(2004年03月25日 18:20)
インタフェースの実装は、また別クラスで行うというという想定のサンプルです。
// ActionScript 2.0クラス定義ファイル: AnotherClass.as
class AnotherClass implements MyInterface {}
// Flashムービー(SWF)
var obj:MyClass = new MyClass();
obj.receiveInterface(new AnotherClass());
●3.oshige(2004年03月25日 18:50)
あ、なるほど