gpt4 book ai didi

java - 如何为 ArrayList 中的所有对象调用一个方法?

转载 作者:搜寻专家 更新时间:2023-11-01 03:59:49 26 4
gpt4 key购买 nike

所以我有一个界面 Pet 如下所示:

public interface Pet{
void Eat();
}

实现者:

public class Puppies implements Pet {
@Override
public void Eat() {
// Something gets eaten here, presumably
}
}

public class Kittens implements Pet {
@Override
public void Eat() {
// Everybody knows Kittens eats something different
}
}

希望我接下来要做的是创建新宠物的 ArrayList:

public class PetList{

public PetList(){
ArrayList pets = new ArrayList<Pet>();

Puppies spot = new Puppies();
Puppies rex = new Puppies();
Kittens meowth = new Kittens();

pets.add(spot);
pets.add(rex);
pets.add(meowth);
}

public static void main(String[] args){
// No idea how to handle this bit
}

我接下来要做的是告诉我所有的宠物吃东西。我该怎么做?

最佳答案

您当前代码的主要问题是 ArrayList ( pets ) 局部于 PetList 构造函数,这意味着您无法在类 PetList 的构造函数之外访问。

因此,首先,将 ArrayList 作为 PetList 类的实例变量,这样即使在构造函数之外也可以通过对象访问

然后,您可以提供一个 eatAll() 方法来迭代 ArrayList<Pet> 并在所有 eat() 对象上调用 pet 方法。

您可以引用下面的代码并遵循内联注释:

public class PetList{
private List<Pet> pets;//now this is an instance variable

public PetList(){
this.pets = new ArrayList<Pet>();//this list is not local now
Puppies spot = new Puppies();
Puppies rex = new Puppies();
Kittens meowth = new Kittens();
pets.add(spot);
pets.add(rex);
pets.add(meowth);
}

public void eatAll() { //method to invoke eat() on list of pets
for(Pet pet : this.pets) { //iterate the pets list
pet.eat();//call eat() on each pet object
}
}

public static void main(String[] args){
PetList petList = new PetList();
petList.eatAll();//invoke the eatAll() method
}
}

作为旁注,我强烈建议您遵循 Java 命名标准(Eat() 应为 eat(),即方法名称应以小写字母开头)并考虑PetList 类重命名为 PetsTesting (或其他),以便开发人员更直观。

最后但重要的一点是,不要将对象直接分配给具体类类型,例如 ArrayList<Pet> pets = new ArrayList<>();Puppies spot = new Puppies();

最佳实践是您需要将对象分配给接口(interface)类型 List<Pet> pets = new ArrayList<Pet>();Pet spot = new Puppies();(称为接口(interface)类型的代码)

关于java - 如何为 ArrayList 中的所有对象调用一个方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43301404/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com