这是我第一次尝试使用java中的代码双向链接程序:
这是我在双链表中获取迭代器以获取所有项目的实现
public Object next() {
if(list.getSize()==0){
throw new NoSuchElementException();
}else{
current=current.getNext();
return current.getItem();
}
}
Run Code Online (Sandbox Code Playgroud)
请不要嘲笑我,不管我尝试得到什么
找不到符号:符号类:NoSuchElementException
我尝试创建一个扩展Exception的类NoSuchElementException.java
然后我明白了
未报告的异常NoSuchElementException; 必须被捕获或声明抛出新的NoSuchElementException();
我尝试将代码更改为:
public Object next() throws NoSuchElementException {
Run Code Online (Sandbox Code Playgroud)
然后我明白了
ElementsIterator中的next()无法在java.util.Iterator中实现next(); 重写方法不会抛出NoSuchElementException
任何人都可以指出我错在哪里.如果这还不足以解决此问题,请告诉我.
编译器给你一个很好的解释.您提供了next()在Iterator中声明的方法的实现,该方法具有以下签名:
public Object next()
Run Code Online (Sandbox Code Playgroud)
但是,您已经引入了自己的已检查异常NoSuchElementException,该异常要求您将方法签名更改为:
public Object next() throws NoSuchElementException
Run Code Online (Sandbox Code Playgroud)
现在您不再实现接口中声明的方法了.你已经改变了签名.
无论如何,有几种方法可以解决这个问题:
更改您的NoSuchElementException类,使其继承RuntimeException而不仅仅是Exception.然后,您不需要向throws方法签名添加声明.
摆脱自定义异常类型,而不是使用Java 已经继承的内置NoSuchElementExceptionRuntimeException.这几乎肯定是更好的选择.
| 归档时间: |
|
| 查看次数: |
29968 次 |
| 最近记录: |