找不到我界面

时间:2016-12-12 04:22:03

标签: java interface

我创建了一个名为LLIterator的接口,它扩展了迭代器并为它添加了两个方法,当我尝试在我的一个类中使用它时,我无法编译它。这就是我得到的。 我的自定义界面是这样的:

      import java.util.Iterator;

        public interface LLIterator<T> extends Iterator<T>{

        boolean hasNext();

        T next();

        void remove();

        void addBefore(T element);

        void addAfter(T element);

        }

我的链接列表是这样的:

import java.lang.StringBuilder;
import java.util.NoSuchElementException;
import java.util.Iterator;
import java.util.ArrayList;


/**
 * A class to represent a linked list of nodes.
 */
public class LinkedList<T> implements Iterable<T>{
  /** the first node of the list, or null if the list is empty */
  private LLNode<T> first;

 /** some codes here  

 @Override
  public LLIterator<T> iterator() {
    return new LinkedListIterator();
  }

  private class LinkedListIterator implements LLIterator<T>{
    LLNode<T> nodeptr = first;
    final LinkedList<T> list = getList();

   @Override
    public void addBefore(T element){
      if(nodeptr == first || list.isEmpty()){
        throw new NoSuchElementException();
      }
      LLNode<T> newnode = new LLNode<T>(element, null);
      newnode.setNext(nodeptr);
    }

    @Override
    public void addAfter(T element){
      LLNode<T> newnode;
      if(nodeptr == first || list.isEmpty()){
        newnode = new LLNode<T>(element, null);
        list.setFirst(newnode);
      }
      newnode = new LLNode<T>(element, null);
      newnode.setNext(nodeptr.getNext());
      nodeptr.setNext(newnode);
    }
  }

在另一个类中,我使用了这个Linkedlist的迭代器方法并调用了addBefore方法,但是当我编译它时,它显示了

cannot find symbol
  symbol:   method addAfter(WordData)
  location: variable iterator of type java.util.Iterator<WordData>

这是我另一个班级的一部分:

 public void addFollowingWord(String word){
    Iterator<WordData> iterator = list.iterator();
    WordData current = iterator.next();
    while(iterator.hasNext()){
      if(current.getWord().equals(word)){
        current.incrementCount();
      }
      else if(current.getWord().compareTo(word) < 0){
        current = iterator.next();
      }
      else if(current.getWord().compareTo(word) > 0){
        WordData newword = new WordData(word);
        iterator.addBefore(newword);
      }
    }
    if(!iterator.hasNext()){
     WordData newword = new WordData(word);
      iterator.addAfter(newword);
  }
}

我很困惑,我在某个地方犯了什么错误,或者我错过了什么?

1 个答案:

答案 0 :(得分:4)

您无法访问自定义界面上的方法,因为它被转换为Iterator。更新您的iterator()方法以返回子接口:

@Override
public LLIterator<T> iterator() {
    return new LinkedListIterator();
}