背景:我在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);
}
}
答案 0 :(得分:2)
您必须覆盖Animal#toString()
方法。
您可以在Animal
班级中找到类似的内容:
@Override
public String toString() {
return String.format("Animal: name=%s, age=%s, sex=%s", name, age, sex);
}