このエラーが発生する理由を理解しようとしています:
-- これはエラーです --
File: ...\HashTable.java [line: 103]
Error: The return type is incompatible with HashTableInterface<Key,Value>.iterators()
インターフェイスには内部クラスが含まれています。
public class Entry<Key, Value>{...}
LinkedList は Java API に似ていますが、反復子の内部クラスが含まれていますが、次のようなより単純なものをテストする場合:
-- これは、少なくとも drjava のインタラクション ペインでは機能するコードです --
LinkedList<String> list = new LinkedList<String>();
Iterator<String> test = list.iterator();
まだ、このメソッドを HashTable クラス内でコンパイルすることはできません。
-- これは私が作業できないコードです --
public Iterator<Entry<Key, Value>> iterator(){
LinkedList<Entry<Key, Value>> iter = new LinkedList<Entry<Key, Value>>();
return iter.iterator();
}
単純なものだと思いますが、それほど複雑ではないように見えますが、どんな意見でも大歓迎です。
** list.iterator(); にするはずだったのに申し訳ありません。
編集
-- さて、これがインターフェースです --
import nhUtilities.containers2.*;
interface HashTableInterface<Key, Value> {
public boolean isEmpty();
public Value get(Key key);
public void add(Key key, Value value);
public void remove(Key key);
public void clear();
public Iterator<Entry<Key, Value>> iterator();
public interface Entry<Key, Value> {
public Key getKey();
public Value getValue();
public void setValue(Value value);
}
}
-- これは、壊れたメソッドが存在する HashTable の内部クラスである実装されたエントリです --
public class Entry<Key, Value> {
private Key k;
private Value v;
public Entry(Key key, Value value) {
k = key;
v = value;
}
/**
* Returns a key of pair;
*/
public Key getKey() {
return this.k;
}
/**
* Returns value of pair;
*/
public Value getValue() {
return this.v;
}
}
編集+
だから私はちょうど気づいた
public class LinkedList<Element> extends AbstractList<Element>
と
public abstract class AbstractList<Element> implements List<Element>
と
public interface List<Element> extends java.lang.Iterable<Element>
まだLinkedListの中にあります
private class Iterator extends AbstractIterator<Element>
implements nhUtilities.containers2.Iterator<Element>
おそらくそれが競合を引き起こしているのかもしれません(私が使用しているLinkedListはJava API LinkedListではないため)?