我正在尝试理解 Java Iterator
和 Iterable
接口(interface)
我正在写这个类
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
之外作为
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
。他们做不同的事情。迭代器自然是有状态的 - 当您使用它进行迭代时,它必须更新它的世界观。然而,可迭代对象只需要能够创建新的迭代器。特别是,您可以让多个迭代器同时处理同一个原始可迭代对象。
您当前的方法非常好 - 我会更改实现的某些方面,但就职责分离而言很好。
关于java - 在同一个类中实现 Java Iterator 和 Iterable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5836174/