我认为这可能是一个设计问题,但是我的方法存在问题,该方法应返回在该方法中传递的特定类。但是,该方法应返回修改后的类,但返回null。
AnimalSummary animalSummary = new AnimalSummary()
for (animal : animals){
animalSummary = new Zoo().calculateAnimalTypeLegs(animal, animalSummary)
}
这是方法
AnimalSummary calculateAnimalTypeLegs(Animal animal, AnimalSummary animalSummary){
if (animal.type.equals("Bear")
animalSummary.setTotalLegs(animalSummary.getTotalLegs()+4)
if (animal.type.equals("Human")
animalSummary.setTotalLegs(animalSummary.getTotalLegs()+2)
return animalSummary
}
在遍历所有元素的同时,第一个类已正确初始化,但是在第一次返回方法和第二个元素之后,class AnimalSummary为空。
第一次调试该方法时,正确初始化了animalSummary类。但是,返回值并在第二次迭代中输入后,animalSummary类为空
答案 0 :(得分:1)
尝试通过提供的少量代码重新创建问题:
public class Animal {
public String type;
}
public class Zoo {
public AnimalSummary calculateAnimalTypeLegs(Animal animal, AnimalSummary animalSummary){
if (animal.type.equals("Bear"))
animalSummary.setTotalLegs(animalSummary.getTotalLegs()+4);
if (animal.type.equals("Human"))
animalSummary.setTotalLegs(animalSummary.getTotalLegs()+2);
return animalSummary;
}
}
public class AnimalSummary {
public int getTotalLegs() {
return totalLegs;
}
public void setTotalLegs(int totalLegs) {
this.totalLegs = totalLegs;
}
private int totalLegs;
}
public class Main {
public static void main(String[] args) throws Exception {
Animal bear = new Animal();
bear.type = "Bear";
Animal human = new Animal();
human.type = "Human";
List<Animal> animals = Arrays.asList(bear, human);
AnimalSummary animalSummary = new AnimalSummary();
for (Animal animal : animals){
animalSummary = new Zoo().calculateAnimalTypeLegs(animal, animalSummary);
}
System.out.println(animalSummary.getTotalLegs());
}
}
输入:熊;人类
结果: 6
如您所见,一切正常,并且animalSummary在任何时候都不为null。您能指出这和您的代码有什么区别吗?
答案 1 :(得分:0)
尝试使用此代码:
List<AnimalSummary> animalSummaryList = new ArrayList<>();
for (animal : animals){
AnimalSummary animalSummary = new AnimalSummary();
animalSummaryList.add(new Zoo().calculateAnimalTypeLegs(animal, animalSummary));
}
,经过所有迭代后,获得结果animalSummaryList并对其进行迭代以得到结果。