簡體   English   中英

使用泛型Object []的ClassCastException無法強制轉換

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM