[英]Cannot Resolve Method when using generics
我正在嘗試為我的項目添加一棵樹。
此樹將包含一些在移動后處於不同板狀態的節點。
現在,我的項目的結構如下:
src
Agent Support Test Threes
Tree.java Some class.java some class Board.java
我希望我的樹將這些Board對象存儲在src.Threes包中。 但是,在我的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){
}
}
這就是問題:
public static class Node<Board>
那是在聲明一個名為Node
的通用類,而Board
是一個類型參數。 在Node
,標識符Board
是指稱為Board
的類型參數, 而不是 Type 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;
...
}
...但是您不能在Node
引用特定於Board
成員。 您可以將T
約束為Board
或子類型:
public static class Node<T extends Board> {
private T data;
private Node<T> parent;
private List<Node<T>> children;
...
}
……到那時,您的gameOver
等調用將起作用-但這同時是特定於董事會和通用的奇怪混合。 我不希望Node
或Tree
類具有“游戲結束”的任何概念。 分開您的擔心!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.