【问题标题】:toString, NullpointerexceptiontoString,空指针异常
【发布时间】:2012-11-07 18:03:37
【问题描述】:

我在尝试从数组列表中获取树名时收到 Nullpointerexception。我已经单独测试了名称,但我仍然收到此错误。我只想知道哪台设备在砍哪棵树。

public class TreeTester {
public static void main(String[] args) {   
    Tree trees = new Tree("Trees");
    Tree tree1 = new Tree("Ash Tree");
    trees.addTree(tree1);

树类

public Class Tree{
    private ArrayList<Tree> theTrees;
    private String treeName;

    //Forgot these
    Tree(String trees //There are more but not relevent) {
        theTrees = new ArrayList<Tree>();
    }

    Tree(String treeName){
        this.treeName = treeName;
    }
    //

    public boolean addTree(Tree newTree){
        theTrees.add(newTree);
        return true;
    }

    @Override
    public String toString(){
        String s = getTreeName();
        return s;
    }

    private String getTreeName() {
        return this.treeName; }
    }

//------为了方便而缩短------------------------ --// 想象一下缺少的变量和构造函数

public Class Equipment{
    private Tree TreeDetails;
    @Override
    public String toString(){
        String s = "Using " + getEqupiment(); + "to cut " + setCutTree()
    }

    public boolean setCutTree(){
        this.treename = treename.toString(); //Nullpointer issue here
        return this.treecut = true;
        //getEquipment works fine
    }

}

【问题讨论】:

  • 但您的成员变量 treename 仍未在树类中初始化。你在哪里给树名赋值?
  • 您的构造函数应该由 Cyan 回答。
  • 除了答案...您的构造函数描述在这里不正确...他们两个的签名都是树(字符串树)...请更正...

标签: java object reference nullpointerexception tostring


【解决方案1】:

你需要初始化theTreesArrayList

public class Tree {
   private ArrayList<Tree> theTrees = new ArrayList<Tree>();

您还遗漏了您在main 方法中使用的Tree 的一个参数构造函数。由于即使在访问名称时您也会得到 NullPointerException,我假设此构造函数也不会初始化 treeName

使用构造函数,类应该如下所示:

public class Tree {

   private ArrayList<Tree> theTrees;
   private String treeName;

   public Tree(String treeName) {
      this.treeName = treeName;
      this.theTrees = new ArrayList<Tree>();
   } 
   ...

【讨论】:

  • 抱歉,我忘了为原始问题添加这些内容,您现在可以在那里看到它们。
  • 你不能有两个都以字符串作为唯一参数的构造函数。那不会编译。将所有初始化放入一个构造函数中。
  • treeName 构造函数实际上需要更多输入,但为了简单起见,我将其缩短了。
  • 在这种情况下,请确保将 this.treeName = trees; 添加到您的 trees 构造函数中。
猜你喜欢
  • 1970-01-01
  • 2015-07-12
相关资源
最近更新 更多