【问题标题】:Implement java interface to arraylist实现arraylist的java接口
【发布时间】:2021-09-01 20:04:29
【问题描述】:

我正在编写一个代码,其中包含狗的名字ArrayList。接口方法允许动物发出声音(例如"woof")。我有一个 for 循环,它遍历整个数组并确定动物是否说。我遇到的问题是obj.speak() 不工作。每当我运行它时,它会说找不到符号,但我很困惑,因为我已经把它放在那里了。我不知道如何解决这个问题,因为我在多个网站上寻找答案,但它们没有帮助。我假设 ArrayList 正在循环,因为我放了一个 for 循环来遍历整个事情。

public class Main {
    public static void main(String[] args) {
        ArrayList dogs= new ArrayList();
        dogs.add(new Dog("Fred"));
        dogs.add(new Dog("Wanda"));
        for (Object e: dogs) {
            e.speak();
        }
    }
}
interface Speak{
    public void speak();
}
class Dog implements Speak {

    private String name;
    
    public Dog(String name) {
        this.name = name;
    }
    
    public void speak() {
        System.out.println("Woof");
    }
}

【问题讨论】:

标签: java for-loop generics arraylist interface


【解决方案1】:

ArrayList 可以/应该采用类型

ArrayList<Dog> dogs= new ArrayList<>();
dogs.add(new Dog("Fred"));
dogs.add(new Dog("Wanda"));
for (Dog e: dogs)
{
    e.speak();
}

【讨论】:

    【解决方案2】:

    使用泛型类型,而不是原始类型。尽量使用最窄的类型(例如,Speak 而不是 Dog,因为您只从该接口调用方法)。

    List<Speak> dogs = new ArrayList<>();
    dogs.add(new Dog("Fred"));
    dogs.add(new Dog("Wanda"));
    for (Speak e: dogs) {
        e.speak();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-08
      • 2017-10-21
      • 2012-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多