繁体   English   中英

如何从Java中的另一个类访问实例变量

[英]How to access instance variable from another class in Java

我正在尝试实现树数据结构。 当前,我在GeneralTree.java中编程addNode()方法时遇到问题。 我想检查一下GeneralTree.root()是否为null,如果是,则将数据添加到该节点。 我在从GeneralTree类的GeneralNode类访问数据实例变量时遇到问题。

GeneralNode.java

import java.util.ArrayList;


public class GeneralNode {
    int data;
    GeneralNode parent;
    ArrayList<GeneralNode> children;

    public void setData(int i){
        data = i;
    }

    public int getData(){
        return data;

    }
    }

GeneralTree.Java

import java.util.ArrayList;


public class GeneralTree {

    GeneralNode root;


public GeneralTree(){

}

public void addNode(int data){
    if (GeneralTree.root == null){
        root.setData(data);
    }


}

public boolean isEmpty(){
    return root == null;
}

public GeneralNode root(){
    return root;
}

/*
public int getPosition(){
    return position;
}
*/
public static void main(String[] args){
    GeneralTree myTree = new GeneralTree();
    System.out.println(myTree);
    System.out.println(myTree.root());
    System.out.println(myTree.isEmpty());



}

}

您的addNode方法不应该编译,因为root不是静态的,因此您应该直接访问它,不需要类名。 条件应为!= null:

public void addNode(int data){
    if (root != null){ //updated line
        root.setData(data);
    }
}

另外,您的构造函数应初始化root:

public GeneralTree() {
    root = new GeneralNode();
}

如果引用不是静态的,则无法访问类似于GeneralTree.rootroot引用。 如果所有GeneralTree对象的root值都相同,则将其声明为静态。

如果所有GeneralTree对象的root值都不相同,请按以下方式更改方法:

public void addNode(int data){
if (this.root == null){
    root.setData(data);
}

如果我正确理解了您的问题,则需要创建GeneralNode的实例或将类设为静态。

public static void main(String[] args){

    GeneralTree myTree = new GeneralTree();

    GeneralNode theGeneralNode = new GeneralNode();

    System.out.println(myTree);
    System.out.println(myTree.root());
    System.out.println(myTree.isEmpty());

}

之后,您可以在GeneralNode中引用其中的数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM