【发布时间】:2020-01-24 00:23:41
【问题描述】:
假设您在 Java 中给出了一个扩展 Iterable 接口的类。这个类必须提供一个Iterator,它应该返回周围类的实例,看看main方法。
public class Test implements Iterable<Test> {
@Override
public Iterator<Test> iterator() {
return new Iterator<Test>() {
private boolean onlyOnce = false;
@Override
public boolean hasNext() {
return false;
}
@Override
public Test next() {
if (!onlyOnce) {
onlyOnce = true;
// TODO return
}
throw new NoSuchElementException("Iterator has already been called");
}
};
}
public static void main(String[] args) {
Test test = new Test();
Test test2 = test.iterator().next();
boolean b = test == test2; // should be true
}
}
如何在 Java 中解决这个问题?
【问题讨论】:
-
真的不清楚你想要达到什么目的......但是......
return Test.this;? -
我什至不确定“这个问题”是什么。迭代你已经拥有的对象是没有意义的。我认为这里有一个 XY 问题。
-
这没有意义,所以不确定你要做什么。你忘了什么吗?
// TODO return -
hasNext()应该在第一次调用时返回true;此后它应该返回false。所以让它返回!onlyOnce。或者反转onlyOnce的极性(称它为firstTime并将其初始化为true)。