尝试将新的Class实例添加到ArrayList时,while循环中出现NullPointerException

时间:2014-04-26 19:25:49

标签: java arraylist while-loop nullpointerexception instance

我越是谷歌,我就越困惑。

我从CSV中引入一个未知长度的名称列表以及其他一些细节,然后我需要将其转换为Person对象并存储在名为people的列表中,这是类Club的实例变量,a基本上是其成员名单。

这是一个非常简化的版本,我需要做一些更复杂的事情,我需要循环浏览一个文件,为每一行创建对象,然后我需要添加到列表集合中。

当我运行我的代码时,我一直收到nullPointerException错误,而且我很难避免如何避免它。我猜测我创建新对象时的变量p需要在每个循环上进行更改,但我不认为可以动态更改变量吗?

无法想象每次如何使用有效的非null引用将对象提交到集合。非常感谢任何帮助。我试图在下面的代码中删除所有不必要的东西。

谢谢

   //class arraylist instance variable of class "Club"
   private ArrayList<Person> people;

   //class constructor for Club
   public Club()
   {List<Person> people = new ArrayList<>();}

   public void readInClubMembers()
   {
      //some variables concerning the file input
      String currentLine;
      String name;
      String ageGroup;
      while (bufferedScanner.hasNextLine())
      {
         //some lines bringing in the scanner input from the file
         name = lineScanner.next();
         ageGroup = "young";
         Person p = new Person(); // i guess things are going wrong around here
         people.add(p);
         p.setName(name);
         p.setAgeGroup(ageGroup);
      }
   }

1 个答案:

答案 0 :(得分:3)

在构造函数中移除List<Person>之前的people = …,否则您在构造函数中声明了一个新的局部变量people,遮蔽字段 {{1} (然后从未使用过)。这使得类字段未初始化(people),然后导致NPE。

您想要的是初始化字段null

people

显示差异:

public Club() {
    // you can also use "this.people = …" to be explicit
    people = new ArrayList<>();
}