Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java foreach不适用于类型_Java_List_Loops - Fatal编程技术网

Java foreach不适用于类型

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);

我试图将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 {
}
公共类主{
公共静态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
    都是很好的候选者)。