gpt4 book ai didi

java - 返回私有(private)列表(在类里面)的迭代器是否被认为是不好的做法?

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:40 25 4
gpt4 key购买 nike

假设我有两个类:Animal 和 Zoo,它们具有包含 Animal 实例的私有(private)列表。

之所以要返回迭代器,是为了避免定义setters和getters以及移除方法。

这会破坏封装吗?

class Zoo{
private List<Animal> animalList;
public Zoo(){
animalList = new ArrayList<Animal>();
}
public void addAnimal(Animal animal){
animalList.add(animal);
}
public Iterator<Animal> iterator(){
return animalList.iterator();
}
}

class Animal{
private String name;
private double weight, height;

Animal(String name, double weight, double height){
this.name = name;
this.weight = weight;
this.height = height;
}
}

最佳答案

在 Iterable 接口(interface)之外使用 Iterator 是极其罕见的。我建议不要这样做。

我认为这样会更好:

public Iterable<Animal> animals(){
return Collections.unmodifiableList( animalList );
}

for(Animal a : zoo.animals()) {
//do something
}

我反对 Zoo implements Iterable<Animal> ;不要引入不必要的类型关系。

在 Java 8 中,更优选的做法可能是使用 Stream 而不是 Iterable

public Stream<Animal> animals(){
return animalList.stream();
}

zoo.animals().forEach( ...

关于java - 返回私有(private)列表(在类里面)的迭代器是否被认为是不好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31210657/

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