gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:57:07 24 4
gpt4 key购买 nike

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

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

现在我的项目结构如下:

                               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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com