ArrayList使用Object作为Type

时间:2015-05-09 09:50:27

标签: java arraylist

背景:我在Java中愚弄。我创建了一个名为Animal的类,它跟踪名称,年龄,性别和numberOfAnimals Created。它有构造函数,存取方法,printNumAnimals的方法(输出静态变量numberOfAnimals)和printAnimals(输出实例变量值)。

当我在Main方法中实例化一个新的Animal对象时,我可以使用构造函数或set方法来设置实例变量的值。一切顺利!

问题:当我创建Animal对象的ArrayList时,它可以工作。它创建了ArrayList,但是当我输出时,它输出对动物对象的引用,如:[animal.Animal@15db9742,animal.Animal @ 6d06d69c,animal.Animal @ 7852e922],而不是单个字段值。正如您在下面的代码中看到的,我做了一个简单的动物sysout,它是ArrayList。我知道我可以设置一个Iterator循环遍历ArrayList但是我想输出字段的值而不仅仅是对象的引用。我怎样才能做到这一点?

我省略了Animal类代码,因为这是一个非常简单的类,包含私有字段和公共getter和setter。请参阅以下主要类别:

import java.util.ArrayList;

import animal.Animal;

public class Main {

    public static void main(String[] args) {

        /*
        Animal animal= new Animal();
        animal.setName("");
        animal.setAge(-2);
        animal.setSex("Jake");

        animal.printAnimal();
        Animal.printNumAnimals();
        */

        ArrayList<Animal> animals = new ArrayList<Animal>();

        Animal animal;

        animal = new Animal();
        animal.setName("Fido");
        animal.setAge(3);
        animal.setSex("Male");
        animals.add(animal);

        animal = new Animal();
        animal.setName("Fifi");
        animal.setAge(1);
        animal.setSex("Female");
        animals.add(animal);

        animal = new Animal();
        animal.setName("Jake");
        animal.setAge(2);
        animal.setSex("female");
        animals.add(animal);

        Animal.printNumAnimals();
        System.out.println(animals);

    }

}

1 个答案:

答案 0 :(得分:2)

您必须覆盖Animal#toString()方法。

您可以在Animal班级中找到类似的内容:

@Override
public String toString() {
     return String.format("Animal: name=%s, age=%s, sex=%s", name, age, sex);
}