[英]Generics: ClassCastException: java.lang.Object[] cannot be cast to
[英]ClassCastException using Generics Object[] cannot be cast
因此,我試圖創建一個使用數組實現堆的類,以便創建優先列表。 在我的構造函數中,我想創建一個Entry對象數組。 這可能嗎? 我之前做了一些通用的轉換,並且嘗試了所有對我有用的東西。 我覺得應該有可能,但我不知道。
這是我運行它時遇到的異常:
[Ljava.lang.Object; 無法轉換為[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
類:
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;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.