java - 使用泛型时无法解析方法

标签 java generics tree

我正在尝试为我的项目实现一棵树。

这棵树将包含一些移动后处于不同棋盘状态的节点。

现在我的项目结构如下:

                               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是通用的。

如果您确实想要 TreeNode为了通用,您应该像这样声明它们:

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等电话将起作用 - 但这将是董事会特定和通用同时的奇怪组合。我没想到 NodeTree类有任何“游戏结束”的概念。分开你的担忧!

关于java - 使用泛型时无法解析方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23787127/

相关文章:

java - 用 SAX 解析 XML |如何处理特殊字符?

java - 从 Builder 和 Notifier 访问全局配置的数据

java - 如何将值输入到通用定义的数组列表中?

java - 如何设计删除时的多对多关系?

java - 如何编写公共(public)类 MyList<E>?

c# - 如何在 DynamicProxy 类中使​​用自定义属性

java - 使用带有通配符的泛型类型作为它自己的类型

java - 如何在非二叉树的一次递归搜索中获取节点的深度

c - 通过从堆中删除值并向堆中插入值来同步文件和堆中的数据

r - 无法将 mothur 树导入 R