我正试图为我的项目建立一棵树。
此树将包含一些移动后具有不同电路板状态的节点。
现在我的项目结构如下:
src
Agent Support Test Threes
Tree.java Some class.java some class Board.java
我希望我的树存储在src.Threes包中保存的这些Board对象。但是在我的Tree类中,它不允许我访问我的公共董事会方法。
我确信我只是错过了一些非常基本的东西,但是在花时间寻找我所缺少的东西后,我无法弄清楚这一点。
请参阅下面的Tree.java代码:
package src.Agent;
import java.util.ArrayList;
import src.Threes.Board; // unused import
import java.util.List;
public class Tree<Board> {
private Node<Board> root;
public Tree(Board RootData){
root = new Node<Board>(RootData);
//root.data = RootData;
//root.children = new ArrayList<Node<Board>>(); // maximum length of 4
}
public static class Node<Board>{
private Board data;
private Node<Board> parent;
private List<Node<Board>> children;
public Node(Board board){
data = board;
children = new ArrayList<Node<Board>>();
}
private boolean addChild(Board board){
return !board.gameOver(); // Cannot resolve method gameOver() (public method in Board).
}
}
public static void main(String[] args){
}
}
答案 0 :(得分:1)
这是问题所在:
public static class Node<Board>
这声明了一个名为Node
的泛型类,而Board
是一个类型参数。在Node
中,标识符Board
引用名为Board
的类型参数,不是类型Board
本身。
看起来你根本不想要它是通用的,所以你可以把它改成:
public static class Node {
...
}
每当您在其余代码中使用Node<Board>
到Node
时,就会更改。
同样,我怀疑你不希望Tree
是通用的。
如果你做希望Tree
和Node
是通用的,你应该这样声明:
public static class Node<T> {
private T data;
private Node<T> parent;
private List<Node<T>> children;
...
}
...但是你不能在Board
中引用Node
- 特定成员。您可以将T
限制为Board
或子类型:
public static class Node<T extends Board> {
private T data;
private Node<T> parent;
private List<Node<T>> children;
...
}
......此时你的gameOver
等电话会起作用 - 但这可能是特定于董事会和通用的奇怪组合。我不希望Node
或Tree
类有任何“游戏结束”的概念。分开你的担忧!