【问题标题】:Error when creating a list of objects - NullPointerException创建对象列表时出错 - NullPointerException
【发布时间】:2015-07-16 22:35:32
【问题描述】:

这应该是相当简单的事情,但我无法弄清楚我的错误。首先,我正在尝试编写一个程序,该程序将接受用户输入并将输入作为对象添加到名为aList 的列表中。我有两门课,一类叫Group,一类叫ListObject

这是Group类代码

public class Group
{


 List<ListObject> aList = new ArrayList();
   public Group()
   {


   }

   public void addObject(Object aName)
   {
      aList.add(aName);     

   }
}

这是我的 ListObject 类

public class ListObject
{

    private String name;
    public int value;

    /**
     * Constructor
     */
    public ListObject(String aName)
    {
       super();
       this.name = firstName;
       this.value = 10;            
    }
}

我需要 Group 类中的方法来获取用户输入,创建一个具有该名称的对象,然后将其添加到列表 aList 中,并将该列表中的所有对象分配为值 -1 开始。出于某种原因,我返回了 NullPopinterException。希望你能指出我错过了什么。请注意,当我只是添加字符串而不是 ListObject 对象的实例时,我确实有这个工作。

【问题讨论】:

  • 您的Group 类甚至不应该编译...您没有aList 字段,只有构造函数中的局部变量。如果那一个字段,那么您将无法在其上调用add(Object),因为它是List&lt;ListObject&gt;,而不是List&lt;Object&gt;...请发布一个简短但完整的显示实际失败的程序 - 阅读tinyurl.com/so-npe
  • 抱歉,我将代码转移到这里可能是一个错误,因为它的编写方式略有不同。我会附加这些错误
  • 不,不要只是“附加这些错误” - 将问题中的代码编辑为一个简短但完整的程序,实际演示问题。但是,是的,您也应该包含堆栈跟踪...
  • 除了在构造函数中,我认为你不能像这样将ArrayList 分配给List
  • 我已经重写了它,它至少在我的端编译

标签: java list arraylist nullpointerexception


【解决方案1】:

如下修改你的代码:

public class Group {
   List<ListObject> aList = new ArrayList();

   public Group() {
      super();
   }

   public void addObject(ListObject aName) {
      aList.add(aName);     
   }
}

您的代码有两个问题:

  1. 您在构造函数中重新定义的 aList 局部变量隐藏了 aList 实例变量。您最终在构造函数中初始化了局部变量 aList,而不是初始化 aList 实例变量。因此,实例变量始终为空,当您在空引用上调用 addToList 中的 add 方法时,您会得到一个 NullPointerException

  2. 您的列表声明为List&lt;ListObject&gt;。这意味着列表只能包含ListObject 类型的对象。这称为type-safetyaddObject 方法的参数应更改为ListObject。另请注意,您需要创建一个ListObject 并将其传递给addObject 方法。

【讨论】:

  • OP 提供的代码甚至都不会编译 - 在问题真正有意义之前回答没有意义,IMO。
  • @JonSkeet 同意。暂时删除并重新回复。
  • 感谢您,有一个问题是该方法需要两个参数(Object 和 Int)。我假设 int 用于 ListObject 值,但我需要将所有对象自动分配给 -1,而不是通过方法输入它们的值
  • @JackB 数组中的索引位置不能为负数。
  • 让我澄清一下:尝试编译时出现错误no suitable method found for add(java.lang.Object)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-27
  • 2015-01-20
  • 2020-07-31
  • 1970-01-01
相关资源
最近更新 更多