リンクリストを使用して簡単な辞書ADTを作成するつもりです。getKeys()メソッドにほとんど問題はありません。コードは次のとおりです。
@Override
public K[] getKeys()
{
if(head==null)
return null;
else
{
Vector<K> v = new Vector();
ListNode<K,V> temp= head;
while(temp!=null)
{
v.add(temp.key);
temp=temp.next;
}
//K keys[] = new O[v.size()];
return (K[])v.toArray();//run time error
}
}
次のエラーが発生します:
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Comparable;
at Dictionary.ListDictionary.getKeys(ListDictionary.java:17)
at Dictionary.DictionaryDriver.test(DictionaryDriver.java:83)
at Dictionary.DictionaryDriver.main(DictionaryDriver.java:107)
Java Result: 1
これが私が実装しようとしているインターフェースです:
public interface DictionaryInterface <K extends Comparable<K>, V>
{
public void insert(K key, V value);
public V getValue(K str);
public void remove(K key);
public K[] getKeys();
}
ジェネリックの配列を作成できないことは理解していますが、ジェネリック型を型にキャストすることに問題はありませんでした。Object
ジェネリック型のK
拡張と関係がありComparable
ますか?これを回避するにはどうすればよいですか?