我很难理解遗传的遗传。我得到的错误是:
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
我所拥有的是一个继承自Stage的名为Stage0(Stage的内联类)的子类。 Stage0将具有基本相同的功能栏 - Stage0将从其父类中@Override方法。 这是Stage类的第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;
}
答案 0 :(得分:2)
因为您没有在super
构造函数代码中指定对Stage0
的调用,所以编译器会为您插入它,就好像您键入了这个:
Stage0(ArrayList<T> inQ, double inputTime, ArrayList<T> outQ)
{
super(); // <======================
inputQueue = inQ;
takesTime = inputTime;
outputQueue = outQ;
}
从错误消息中可以看出Stage
没有匹配的构造函数。错误说:
构造函数类Stage中的Stage不能应用于给定类型...
required:ArrayList,double,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;
}