Java foreach不适用于类型
我试图将dog和fish对象存储到LinkedList中,为什么我的for循环增强不起作用Java foreach不适用于类型,java,list,loops,Java,List,Loops,我试图将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);
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 {
}
公共类主{
公共静态void main(字符串[]args){
动物主义者动物=新动物主义者();
动物狗=新狗();
动物鱼=新鱼();
动物。添加(狗);
动物。添加(鱼);
}
}
导入java.util.LinkedList;
导入java.util.List;
公营动物学家{
私有列表列表=新链接列表();
公共空间添加(动物){
对于(Animal x:Animal){基本上,您在这里犯了一些简单的错误。而且(在我看来)连接这些错误的共同线索是,您对所创建的类的用途没有一个清晰的概念
例如,您的Animal
类表示单个野兽…而不是野兽的集合。您不会将一个动物“添加”到另一个动物中,一个动物不包含其他动物1。在您开发的简单“世界模型”中,这两种情况都没有意义
然而,你写了:
animal.add(dog);
animal.add(fish);
这是:
for (Animal x: animal)
现在,编译器可以看到2出了问题:
- 它知道没有为
maro
类声明的add(动物)
方法
- 它知道
Animal
没有实现Iterable
…这将是迭代动物所包含的动物的方法
但是编译器不能做的是理解导致你犯这些错误的思维过程。它不能对你说:“动物包含动物是没有意义的!”
思考和理解你试图完成的任务是你的工作。这就是为什么人们而不是计算机被聘为程序员
下面是你应该做的。看看你的每一行代码,问问你自己
这是在告诉程序做什么
这样做真的有意义吗
当你从“面部掌纹”中恢复过来后,纠正错误
1-除非是一顿美餐后的蟒蛇
2-我使用“看”、“知道”和“理解”这里是隐喻意义上的。编译器没有思考或理解的能力。它只是应用一组规则来确定所编写的程序是否是有效的Java代码。但这正是我在这里试图表达的观点。提示:main
中的animal
和add
中的animal
是两种不同的动物。“针对动物中的每一种动物”没有多大意义。For循环到底应该做什么?我看不出有任何理由对任何事情进行循环。你知道For循环是什么吗?我在想,针对每一种动物的是我将要创建的动物对象(狗和鱼)(在这段代码中没有这样做),我会将这些对象存储到链表中。这有意义吗?这有意义,但代码不是这样工作的。您的add方法将一个动物添加到列表中,您想多次调用该方法的事实不会改变它对一次调用的作用。@JSmith只有在add
是静态的动物。add(dog)
在逻辑上很好,但是animal
应该有不同的名称(animalist
和animalist
都是很好的候选者)。