2

如果构造函数将其参数作为可变参数(...),则似乎不可能创建一个仅将该可变参数传递给超类的子类。

对于普通函数,有一个与此相同情况的修复相关的问题:Wrapping a Vararg Method in ActionScipt但我无法让它与超级调用一起使用。

基类:

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 回答
0

你可以使用这样的语句:

override public function doSomething(arg1:Object, ...args):void {
  switch(args.length) {
    case 0: super.doSomething(arg1); return;
    case 1: super.doSomething(arg1, args[0]); return;
    case 2: super.doSomething(arg1, args[0], args[1]); return;
  }
}
于 2013-07-18T10:38:38.553 回答