2

如果構造函數將其參數設置爲vararg(...),那麼似乎不可能創建一個僅將該變量傳遞給超類的子類。使用可變參數從動作構造函數中調用super()

對於正常功能的相同情況,有一個相關的問題需要修復: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 

除了實際移動參數的處理子類或轉移其關閉,以一個單獨的初始化方法,沒有人知道如何獲得超級電話吧?

回答

2

很遺憾沒有辦法用... args調用超級構造函數。如果你刪除了調用,它將被編譯器調用(不帶參數)。 arguments也不能從構造函數訪問。

如果您可以更改方法簽名,則修改參數以接受Array而不是... args。否則,正如你所提到的,你可以將它移入一個初始化方法。

+0

嗯,不是問題的答案我所期待的,但由於確認了我的懷疑。 – 2010-02-10 11:10:37

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; 
    } 
} 
相關問題