我正在尝试为我的项目实现一棵树。
这棵树将包含一些移动后处于不同棋盘状态的节点。
现在我的项目结构如下:
src
Agent Support Test Threes
Tree.java Some class.java some class Board.java
我希望我的树能够存储这些保存在包 src.Threes 中的 Board 对象。然而,在我的 Tree 类中,它不允许我访问我的公共(public)板方法。
我确信我只是错过了一些非常基本的东西,但在花时间寻找我错过的东西后我无法弄清楚这一点。
请参阅下面我的 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){
}
}
最佳答案
这就是问题:
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
类有任何“游戏结束”的概念。分开你的担忧!
关于java - 使用泛型时无法解析方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23787127/