2016-05-28 84 views
0

我很難理解帶繼承的泛型。我得到的錯誤是:繼承和泛型的構造方法問題

Stage.java:66: error: constructor Stage in class Stage<T> cannot be applied to given types; 
     { 
     ^
    required: ArrayList<T>,double,ArrayList<T> 
    found: no arguments 
    reason: actual and formal argument lists differ in length 
    where T is a type-variable: 
    T extends Object declared in class Stage 

我所擁有的是一個名爲Stage0(Stage的內聯類)的子類,它繼承自Stage。 Stage0將具有基本相同的功能欄 - Stage0將@從其父類中覆蓋一個方法。 這裏是從舞臺類的63號線(這是STAGE0的開始)

class Stage0 extends Stage<T> 
{ 
    Stage0(ArrayList<T> inQ, double inputTime, ArrayList<T> outQ) 
    { 
     inputQueue = inQ; 
     takesTime = inputTime; 
     outputQueue = outQ; 
    } 

    @Override 
    public boolean isStarving(double time) 
    { 
     return false; 
    } 
} 

什麼是我的錯誤的根源?

乾杯。

public class Stage<T> // equivalent to a 'storage' 
{ 
    private T holdItem; 
    private boolean blocked; 
    private double takesTime, timeTaken, blockedTime, starveTime; 
    private ArrayList<T> inputQueue, outputQueue; 

    public Stage(ArrayList<T> inQ, double inputTime, ArrayList<T> outQ) 
    { 
     inputQueue = inQ; 
     takesTime = inputTime; 
     outputQueue = outQ; 
    } 
+2

請給Stage類的代碼。 – jelleB

+1

@jelleB已添加舞臺代碼。 T.J.已經解決了這個問題。我將標記這樣解決的問題。歡呼:) – fOrceez

回答

2

因爲你沒有指定super來電您Stage0構造函數代碼,編譯器將它插入你,彷彿你已鍵入此:

Stage0(ArrayList<T> inQ, double inputTime, ArrayList<T> outQ) 
{ 
    super();      // <====================== 
    inputQueue = inQ; 
    takesTime = inputTime; 
    outputQueue = outQ; 
} 

從錯誤信息,它看起來Stage沒有匹配的構造函數。錯誤說:在課堂上舞臺

構造階段不能用於給定類型...
要求:ArrayList中,雙,ArrayList的
發現:沒有參數

也就是說,你」當試圖呼叫super()時,它可以找到最匹配的構造函數是super(ArrayList<T>,double,ArrayList<T>)

解決方案是明確使用super,提供必要的參數。在你的情況下,再次基於錯誤消息,那將是:

Stage0(ArrayList<T> inQ, double inputTime, ArrayList<T> outQ) 
{ 
    super(inQ, inputTime, outQ); // <====================== 
    inputQueue = inQ; 
    takesTime = inputTime; 
    outputQueue = outQ; 
} 
+0

這解決了它!一旦定時器啓動,我會馬上解決 - 謝謝! – fOrceez