Implement Java Iterator and Iterable in same class?(在同一个类中实现 Java Iterator 和 Iterable?)
问题描述
我正在尝试理解 Java Iterator
和 Iterable
接口
I am trying to understand Java Iterator
and Iterable
interfaces
我正在写这门课
class MyClass implements Iterable<String> {
public String[] a = null;
public MyClass(String[] arr) {
a = arr;
}
public MyClassIterator iterator() {
return new MyClassIterator(this);
}
public class MyClassIterator implements Iterator<String> {
private MyClass myclass = null;
private int count = 0;
public MyClassIterator(MyClass m) {
myclass = m;
}
public boolean hasNext() {
return count < myclass.a.length;
}
public String next() {
int t = count;
count++;
return myclass.a[t];
}
public void remove() {
throw new UnsupportedOperationException();
}
}
}
它似乎正在工作.
我应该有:
Myclass implements Iterable<Stirng>, Iterator<String> {
}
或者我应该把 MyClassIterator
放在 MyClass
之外
Or I should put MyClassIterator
outside MyClass
as
class MyClass implements Iterable<String> {
public String[] a = null;
public MyClass(String[] arr) {
a = arr;
}
public MyClassIterator iterator() {
return new MyClassIterator(this);
}
}
public class MyClassIterator implements Iterator<String> {
private MyClass myclass = null;
private int count = 0;
public MyClassIterator(MyClass m) {
myclass = m;
}
public boolean hasNext() {
return count < myclass.a.length;
}
public String next() {
int t = count;
count++;
return myclass.a[t];
}
public void remove() {
throw new UnsupportedOperationException();
}
}
哪个更好?
推荐答案
你应该几乎永远同时实现 Iterable
和 Iterator
班级.他们做不同的事情.迭代器自然是有状态的 - 当您使用它进行迭代时,它必须更新其对世界的看法.然而,一个可迭代对象只需要能够创建新的迭代器.特别是,您可以让多个迭代器同时处理同一个原始可迭代对象.
You should almost never implement both Iterable
and Iterator
in the same class. They do different things. An iterator is naturally stateful - as you iterate using it, it has to update its view of the world. An iterable, however, only needs to be able to create new iterators. In particular, you could have several iterators working over the same original iterable at the same time.
您当前的方法非常好 - 我会更改实施的某些方面,但在职责分离方面很好.
Your current approach is pretty much okay - there are aspects of the implementation I'd change, but it's fine in terms of the separation of responsibilities.
这篇关于在同一个类中实现 Java Iterator 和 Iterable?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在同一个类中实现 Java Iterator 和 Iterable?
基础教程推荐
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01