2016-05-28 7 views
0

継承のジェネリックスを理解するのに苦労しています。私は取得していますエラーは次のとおりです。私が持っていることは、ステージから継承STAGE0(ステージのインラインクラス)と呼ばれるサブクラスは継承とジェネリックに関するコンストラクタの問題

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は本質的に同じ機能バーを持ちます - 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; 
    } 
} 

私のエラーの原因は何ですか(STAGE0の始まりです)Stageクラスのライン63からでしょうか?

乾杯。

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

あなたStage0コンストラクタコードでsuperへの呼び出しを指定していないので、あなたがこれを入力したかのように、コンパイラは、あなたのためにそれを挿入します。

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

関連する問題