gpt4 book ai didi

java - 为什么不能循环直接实现 Iterator 的类?

转载 作者:行者123 更新时间:2023-12-02 11:02:02 30 4
gpt4 key购买 nike

我的问题是:是否可以仅通过实现Iterator来遍历容器,即不实现Iterable

是否可以这样做:

//From somewhere
Container c = new Container();
//I add elements to the list in the c object.

for(String s : c){
//Warning: It is not applicable for this expression...
}


class Container implements Iterator<String>{
//Here I implement a single linked list

//Here I implement all of the methods of Iterator
}

最佳答案

尽管这种设计只不过是荒谬的,只是为了解决你的问题,你可以这样写:

public class Container implements Iterable<String>, Iterator<String> {
@Override public Iterator<String> iterator() { return this; }

... everything else you envision for your class ...
}

然后你就可以使用

for (String s : container)

您可以将其写为学习经历,但我强烈建议您永远不要在真正的项目中尝试它。反对它的主要原因是期望迭代器方法始终返回一个新的、独立的迭代器,而此实现实现了相反的效果。举一个具体的例子,想象一下有人需要迭代容器与其自身的笛卡尔积:

for (String s1 : container)
for (String s2 : container)
processPair(s1, s2);

每个 Java 程序员都会告诉您,毫无疑问,将使用容器中的每个可能的对来调用 processPair。相反,他们从你的类(class)中看到的行为会让他们头晕目眩。如果生产中的错误被追踪到此实现,您的队友会......我们只能说他们不会欣赏它。

关于java - 为什么不能循环直接实现 Iterator 的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16935213/

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