interfaceの型をObject型の引数で受取れない [Edit]

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. 1.oshige(2004年03月25日 17:56)

    上のサンプルのクラス定義は間違ってませんか?
    肝心のインタフェースを使ってないのでは?

    class MyClass implements MyInterface {

    implementsいらないの?
    でも、これでも試した結果は同じエラーが出ます。

  2. 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. 3.oshige(2004年03月25日 18:50)

    あ、なるほど

その他の記事