我有一个包含两个数组列表的类,我试图将对象存储到其中,每个对象类型一个。在我的主类中,我像这样插入对象:
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);
}
我的 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);
}
}
但是,我从 objList.addCat(cat);
行开始得到一个 java.lang.NullPointerException
。我在这一行之前打印出了 cat 对象的属性,这两个值似乎都已设置。我试着看看我是否可以将一个 int 传递给我的 addCat arrayList,但我得到了同样的错误,所以我假设我在我的类中错误地使用了 arraylist。我的代码中是否存在显而易见的错误?
最佳答案
我建议的几件事:
- 不要公开您的字段;
- 尽可能使用接口(interface)(List 而不是 ArrayList);
- 赞immutability或者如果您不打算更改它们,至少让您的数据成员成为最终成员;和
- (与此无关)采用 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);
}
}
这应该避免可能发生的任何外部变化。或者,更好的是,使用泛型:
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);
}
}
你正在初始化你的对象列表实例吗?
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);
}
关于ArrayList 的 Java 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1838143/