簡體   English   中英

使用泛型時無法解析方法

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

如果確實希望TreeNode是通用的,則應這樣聲明它們:

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等調用將起作用-但這同時是特定於董事會和通用的奇怪混合。 我不希望NodeTree類具有“游戲結束”的任何概念。 分開您的擔心!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM