ArrayList 的 Java 问题

标签 java arraylist

我有一个包含两个数组列表的类,我试图将对象存储到其中,每个对象类型一个。在我的主类中,我像这样插入对象:

 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。我的代码中是否存在显而易见的错误?

最佳答案

我建议的几件事:

  1. 不要公开您的字段;
  2. 尽可能使用接口(interface)(List 而不是 ArrayList);
  3. immutability或者如果您不打算更改它们,至少让您的数据成员成为最终成员;和
  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);
  }
}

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

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/

相关文章:

java - 具有流畅接口(interface)的方法名称

java - eclipse 在哪里寻找插件中的二进制库?

java - 如何使用 putStringArrayListExtra() 传递 ArrayList

java - 如何使用 ArrayList 和 Array 编写 3 维矩阵

java - 获取 arrayList 中的特定对象

java - 在 Hibernate 注释上分配的生成器类

java - 在 POM 中使用 --enable-preview 执行 Maven 插件

java - 无法设法更改 Spinner 上的文本颜色

Java 数组列表错误

java - 在递归调用java中保留值