java - 从我的界面找不到方法

标签 java interface

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

      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);
  }
}

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

最佳答案

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

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

关于java - 从我的界面找不到方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41094177/

相关文章:

java - 如何占用Eclipse UI中的可用空间?

java - Spring 的 @EntityListeners 在使用 @Postpersist 时抛出异常

java - 翻转频率可视化 - Java - 处理

java - 将文件插入 Google 云端硬盘时无法设置文件修改日期

java - 从 Java 7 转换为 6,Matcher.group

c# - 坚持泛型和接口(interface)。需要基于代码的解决方案,可能需要重新设计接口(interface)

reflection - 如何将接口(interface){}转换为其基础类型

c++ - 通过 C++ 软件上的 C 接口(interface)传递/接收字符串

c++ - C++ 中集合/容器的接口(interface)/父类(super class)

java - Gen-Class 不生成 .class 文件