为什么IntelliJ无法识别我已重写的hasNext()方法?
问题原因与解决方案
核心错误点
你错误地让ResizingArrayStack类实现了Iterator<Item>接口,而你实际需要实现的是Iterable<Item>接口:
Iterable<Item>是标记集合可被迭代的接口,仅要求实现iterator()方法返回迭代器实例,你已经完成了这个方法的编写,只需要修改类的接口声明即可。Iterator<Item>是迭代器本身的接口,要求实现hasNext()、next()等迭代逻辑方法,你已经在内部类ReverseArrayIterator中正确实现了这个接口,不需要让外层栈类也实现它。
修复代码
仅需要修改类声明行即可解决IDE报错:
// 修改前(错误) public class ResizingArrayStack<Item> implements Iterator<Item> // 修改后(正确) public class ResizingArrayStack<Item> implements Iterable<Item>
额外隐藏问题提醒
你的代码里还有两处笔误,后续运行也会报错,建议同步修改:
- 内部类
ReverseArrayIterator中private int i = size();:你定义的成员变量是private int size = 0,如果没有单独实现size()方法,直接改为private int i = size;即可。 next()方法中return a[--i];:你的数组变量命名为array,此处改为return array[--i];即可。
内容的提问来源于stack exchange,提问作者LiuYuan
相关产品推荐
相关产品推荐

