2

コンストラクターがそのパラメーターを vararg (...) として受け取る場合、その vararg をスーパークラスに渡すだけのサブクラスを作成することは不可能のようです。

通常の関数のこの同じ状況の修正に関する関連する質問があります: ActionScipt で Vararg メソッドをラップしますが、それをスーパー コールで動作させることはできません。

基本クラス:

public class Bla
{
    public function Bla(...rest)
    {
        trace(rest[0]); // trace the first parameter
    }

}

サブクラス:

public class Blie extends Bla
{
    public function Blie(...rest)
    {
        // this is not working, it will 
        // pass an array containing all 
        // parameters as the first parameters
        super(rest); 
    }

}

今電話したら

        var b1 = new Bla('d', 'e');
        var b2 = new Blie('a', 'b', 'c');

出力を取得します

d
a,b,c

そして、私はそれを印刷したい:

d
a

パラメータの処理を実際にサブクラスに移動するか、別の初期化メソッドにシフトする以外に、スーパーコールを正しく取得する方法を知っている人はいますか?

4

2 に答える 2

2

残念ながら、 でスーパー コンストラクターを呼び出す方法はありません... args。呼び出しを削除するsuper()と、コンパイラによって呼び出されます (引数なし)。argumentsコンストラクターからもアクセスできません。

メソッドのシグネチャを変更できる場合は、Arrayではなくを受け入れるように引数を変更します... args。それ以外の場合は、前述のように、初期化メソッドに移動できます。

于 2010-02-09T13:55:13.020 に答える