Java问题与ArrayList有关

min*_*pop 1 java arraylist

我有一个包含两个arraylists的类,我正在尝试将对象存储到每个对象类型中.在我的主类中,我正在插入这样的对象:

 for (int i =0; i < 3; i++)
 {
     Cat cat = new Cat("meow",i);
     Dog dog = new Dog("woof",i);
     objList.addCat(cat);
     objList.addDog(dog);
 }
Run Code Online (Sandbox Code Playgroud)

我的ObjectList(objList)类设置如下:

import java.util.ArrayList;

public class ObjectList {
    public ArrayList  cats;
    public ArrayList  dogs;

    public ObjectList()
    {
        this.cats   = new ArrayList();
        this.dogs   = new ArrayList();
    }

    public void addCat(Cat c)
    {
        this.cats.add(c);
    }

    public void addDog(Dog d)
    {
        this.dogs.add(d);
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,我java.lang.NullPointerException开始objList.addCat(cat);在线上.我在此行之前打印出了cat对象属性,并且似乎都设置了两个值.我试着看看我是否可以将一个int传递给我的addCat arrayList,但是我得到了同样的错误,所以我假设我在我的类中使用了arraylist.我的代码中是否有错误显而易见?

cle*_*tus 6

我建议的一些事情:

  1. 不要把你的田地公之于众;
  2. 尽可能使用接口(List而不是ArrayList);
  3. 赞成不变性,或者至少让你的数据成员最后,如果你不打算改变他们.和
  4. (与此无关)采用Java代码约定.

试试这个:

public class ObjectList {
  private final List cats;
  private final List dogs; 

  public ObjectList() {   
    cats = new ArrayList();
    dogs = new ArrayList();
  }

  public void addCat(Cat c) {
    cats.add(c);
  }

  public void addDog(Dog d) {
    dogs.add(d);
  }
}
Run Code Online (Sandbox Code Playgroud)

这应该避免可能发生的任何外部变化.或者,更好的是,使用泛型:

public class ObjectList {
  private final List<Cat> cats;
  private final List<Dog> dogs; 

  public ObjectList() {   
    cats = new ArrayList<Cat>();
    dogs = new ArrayList<Dog>();
  }

  public void addCat(Cat c) {
    cats.add(c);
  }

  public void addDog(Dog d) {
    dogs.add(d);
  }
}
Run Code Online (Sandbox Code Playgroud)

你正在初始化你的对象列表实例吗?

ObjectList objList = new ObjectList();
for (int i=0; i<3; i++)  {
  Cat cat = new Cat("meow",i);
  Dog dog = new Dog("woof",i);
  objList.addCat(cat);
  objList.addDog(dog);
}
Run Code Online (Sandbox Code Playgroud)