![](/img/trans.png)
[英]My Java Error constructor, in class, cannot be applied to given types;
[英](Java) error: constructor MinimaxThread in class MinimaxThread cannot be applied to given types
尝试编译Java代码时,我确实无法解释一个错误:
error: constructor MinimaxThread in class MinimaxThread cannot be applied to given types;
MinimaxThread mmt = new MinimaxThread(board.clone(), 2, true);
^
required: no arguments
found: MCBoard,int,boolean
reason: actual and formal argument lists differ in length
该错误没有任何意义,因为我有一个采用MCBoard,int和boolean的构造函数:
public class MinimaxThread implements Runnable {
public MCBoard board;
public int depth;
public HashMap<Tuple, Integer> moveEvals;
boolean cont = true;
boolean verbose = false;
public MinimaxThread(MCBoard board, int initialDepth, boolean verbose) {
this.board = board;
depth = initialDepth;
moveEvals = new HashMap<Tuple, Integer>();
for (Tuple t : board.legalMoves) {
moveEvals.put(t, new Integer(0));
}
this.verbose = verbose;
}
这是一个重载的构造函数(有一个仅带有MCBoard的构造函数,有一个带有MCBoard和int的构造函数),但是我不认为这有什么用。 有任何想法吗? 这是调用代码:
public static void testMinimax(){
MCBoard board = new MCBoard();
board.move(5,0);
board.move(4,0);
board.move(5,2);
MinimaxThread mmt = new MinimaxThread(board.clone(), 2, true);
mmt.run();
}
编辑: board.clone()
被覆盖:
public MCBoard clone() {
// irrelevant code removed
return new MCBoard(gridClone, turn, legalMovesClone, moveListClone);
}
编辑#2:这是我的git资料库,可重复性:https://github.com/cowpig/MagneticCave
编辑:现在,您已经给我们提供了github URL,我们可以看到MinimaxThread
真实外观-至少在最新的推送代码中:
public class MinimaxThread extends Thread {
public MCBoard board;
public int depth;
}
是的,我明白了为什么编译器会在那个构造函数调用时抱怨...
编辑:在我们知道MCBoard.clone()
被覆盖之前,以下答案很有意义。 但是现在,我看不出编译器为什么要抱怨。 确实,使用您提供的代码(但忽略了实际的实现,这是无关紧要的),所有这些都可以很好地编译:
MinimaxThread.java:
public class MinimaxThread implements Runnable {
public MinimaxThread(MCBoard board, int initialDepth, boolean verbose) {
}
public void run() {
}
}
MCBoard.java:
public class MCBoard {
public MCBoard clone() {
return null;
}
}
Test.java:
public class Test {
public static void main(String[] args) throws Exception {
MCBoard board = new MCBoard();
MinimaxThread mmt = new MinimaxThread(board.clone(), 2, true);
}
}
因此,我怀疑您不是在构建所提供的代码。 尝试构建上面的代码,如果可行,请查看是否可以找出与实际代码之间的区别。
原始答案
大概编译器“认为” board.clone()
返回Object
,因为这就是Object.clone()
声明的。 因此,您需要将结果转换为MCBoard
:
MinimaxThread mmt = new MinimaxThread((MCBoard) board.clone(), 2, true);
另外,您可以在MCBoard
覆盖clone()
,声明它返回MCBoard
而不是Object
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.