我试图创建一个迭代器类来完成我认为的两个简单方法但是我遇到问题我想创建迭代器。我创建迭代器的行给了我一个编译错误说" Iterator是抽象的;无法实例化#34;。我不太清楚这意味着什么,显然我做错了。另外我把方法的目的放在上面,如果你发现它们有任何问题,请告诉我。感谢您的任何意见!
import java.util.Iterator;
private class OrderedListIterator{
Iterator<E> it = new Iterator<E>();
//return true if iterator has more items
public boolean hasNext(){
boolean found = false;
if(it.hasNext == true)
found = true;
return found;
return found;
}
//return next item in the iterator
public E getNext(){
if(it.hasNext != false)
return it.next;
}
//prints out message
public void remove(){
System.out.println("Operation not supported");
}
}
答案 0 :(得分:1)
您收到此错误的原因是因为迭代器是一个接口。
在Java编程语言中,接口是引用类型, 类似于一个类,只能包含常量,方法 签名,默认方法,静态方法和嵌套类型。方法 实体仅存在于默认方法和静态方法中。接口 无法实例化 - 它们只能通过类或实现 由其他接口扩展。扩展将在后面讨论 教训。
来自Java文档https://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html
接口包含方法的定义,而不是实现,这也是您无法创建或调用接口或其方法的原因。迭代器接口有两种方法; hasNext()和next()。您的代码看起来像是要实现迭代器接口。
private class OrderedListIterator implements Iterator<E>
在你的hasNext和next方法中,你需要根据你实现它的方式迭代你的OrderedList。
以下是我之前创建的ArrayList的迭代器示例。
private class ArrayIterator implements Iterator<E> {
private int arrayIndex = 0;
/**
* Checks if the set has a next value.
*
* @return true if there is a next value, else false
*/
public boolean hasNext() {
//Checks that the index is within the size of the ArrayList
return arrayIndex < size;
}
/**
* Gets the next value in the iteration.
*
* @return
* The next value in the list
* @throws NoSuchElementException
* if there is no next element in the list
*/
public E next() throws NoSuchElementException {
if (arrayIndex == size) {
throw new NoSuchElementException();
}
//Checks the ArrayList's data at the current index
return data[arrayIndex++];
}
}
您的私人课程可以访问其周围班级的字段。在我的示例中,迭代器在数组中存储索引(如内部游标),并在当前索引处检查ArrayList的数据。每次调用下一个方法时,索引都会在下次增加。
如果您的OrderedList类类似于LinkedList并且具有节点,则您将保存对该节点的引用,并且每次调用下一个方法时您将返回该节点,然后将光标更改为下一个节点。