foreach不适用于类型

时间:2017-06-23 23:49:06

标签: 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);
        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 {
}

1 个答案:

答案 0 :(得分:1)

基本上,你在这里犯了一些简单的错误。而且(在我看来)链接这些错误的共同线索并没有清楚地知道你正在创建的类的目的。

例如,您的Animal类代表一只野兽......而不是一群野兽。你没有&#34;添加&#34;动物与另一种动物,动物不包含其他动物。在简单的世界模型中,这些事情都没有意义。你已经发展了。

然而,你写了:

    animal.add(dog);
    animal.add(fish);

和此:

    for (Animal x: animal)

现在编译器可以看到 1 某些错误:

  • 它知道没有为add(Animal)类声明Animal方法

  • 它知道Animal没有实现Iterable<Animal> ...这将是动物所包含的动物的迭代方式。

但编译器无法做的是理解导致你犯这些错误的思维过程。它不能对你说:&#34;动物饲养动物没有意义!&#34;。

考虑并理解您尝试执行的任务是您的工作。这就是人们而不是计算机被用作程序员的原因....

这是你应该做的。查看代码的每一行并问问自己。

  1. 这告诉程序要做什么?
  2. 这样做真的有意义吗?
  3. 当你从&#34;面对手掌&#34;恢复时,纠正错误。

    1 - 我正在使用&#34;请参阅&#34;,&#34;知道&#34;并且&#34;了解&#34;这是一个隐喻意义上的。编译器无法思考或理解。它只是应用一组规则来确定所编写的程序是否是有效的Java代码。但这确实是我在这里要做的一点。