因此,我尝试创建一个使用数组实现堆的类,以便创建优先级列表。在我的构造函数中,我想创建一个 Entry 对象数组。这可以吗?我之前做过一些通用的类型转换,并且尝试了通常对我有用的一切。我觉得这应该是可能的,但我无法弄清楚。
这是我运行时遇到的异常:
[Ljava.lang.Object; cannot be cast to [Llab09.Entry;
`public class ArrayHeap<K,V> implements PriorityQueue<K,V> {
`private Comparator<K> comp;
private Entry<K,V>[] data;
private int heapSize;
@SuppressWarnings({"unchecked"})
public ArrayHeap(int size, Comparator<K> c){
data = (Entry<K,V>[]) new Object[size]; // type casting array
heapSize = 0;
comp = c;
}
}
此外,我还将放入嵌套的 Entry 类来查看。
protected static class AHEntry<K,V> implements Entry<K,V> {
private K k;
private V v;
public AHEntry(K key, V value){
k = key;
v = value;
}
public K getKey(){ return k;}
public V getValue(){ return v;}
public void setKey(K key){ k = key;}
public void setValue(V value){ v = value;}
}
最佳答案
线路data = (Entry<K,V>[]) new Object[size]
导致类型转换错误,因为 Object
数组无法转换为 Map.Entry
大批。以下代码使用自定义 AHEntry
您提供的类(class):
public class ArrayHeap<K,V> implements PriorityQueue<K,V> {
private Comparator<K> comp;
private Entry<K,V>[] data;
private int heapSize;
@SuppressWarnings({"unchecked"})
public ArrayHeap(int size, Comparator<K> c){
data = new (AHEntry<K, V>)new AHEntry<?, ?>[size];
heapSize = 0;
comp = c;
}
}
关于java - 使用泛型 Object[] 的 ClassCastException 无法转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29982440/