我正在尝试将dog和fish对象存储到LinkedList中,为什么我的增强for循环不起作用?
public class Main {
public static void main(String[] args) {
AnimalList animal = new AnimalList();
Animal dog = new Dog();
Animal fish = new Fish();
animal.add(dog);
animal.add(fish);
}
}
import java.util.LinkedList;
import java.util.List;
public class AnimalList {
private List<Animal> theList = new LinkedList<>();
public void add(Animal animal) {
for (Animal x: animal) { <--------- foreach not applicable to type.
theList.add(x);
System.out.println(x);
}
}
}
public class Animal {
}
public class Dog extends Animal {
}
public class Fish extends Animal {
}
答案 0 :(得分:1)
基本上,你在这里犯了一些简单的错误。而且(在我看来)链接这些错误的共同线索并没有清楚地知道你正在创建的类的目的。
例如,您的Animal
类代表一只野兽......而不是一群野兽。你没有&#34;添加&#34;动物与另一种动物,动物不包含其他动物。在简单的世界模型中,这些事情都没有意义。你已经发展了。
然而,你写了:
animal.add(dog);
animal.add(fish);
和此:
for (Animal x: animal)
现在编译器可以看到 1 某些错误:
它知道没有为add(Animal)
类声明Animal
方法
它知道Animal
没有实现Iterable<Animal>
...这将是动物所包含的动物的迭代方式。
但编译器无法做的是理解导致你犯这些错误的思维过程。它不能对你说:&#34;动物饲养动物没有意义!&#34;。
考虑并理解您尝试执行的任务是您的工作。这就是人们而不是计算机被用作程序员的原因....
这是你应该做的。查看代码的每一行并问问自己。
当你从&#34;面对手掌&#34;恢复时,纠正错误。
1 - 我正在使用&#34;请参阅&#34;,&#34;知道&#34;并且&#34;了解&#34;这是一个隐喻意义上的。编译器无法思考或理解。它只是应用一组规则来确定所编写的程序是否是有效的Java代码。但这确实是我在这里要做的一点。