我打算使用链表创建一个简单的字典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
这是我试图实现的接口(interface):
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
时从未遇到过问题type.和泛型类型有关系吗K
延伸Comparable
?我该如何解决这个问题?
最佳答案
尝试如下:
return (K[])v.toArray(new Comparable[v.size()]);
但是,顺便说一句,混合泛型和数组并不是最好的主意。
为了安全地执行此操作(并且能够接受 Comparable
以外的类型),您需要获取类型引用,因此您的构造函数可能如下所示:
public Dictionary(Class<K> keyType) {
this.keyType = keyType;
}
稍后,在实例化该数组时,调用:
return (K[]) v.toArray( Array.newInstance(keyType, v.size()) );
关于java - 对象数组未转换为泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12401421/