java - 使用泛型 Object[] 的 ClassCastException 无法转换

标签 java arrays generics casting classcastexception

因此,我尝试创建一个使用数组实现堆的类,以便创建优先级列表。在我的构造函数中,我想创建一个 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/

相关文章:

java - Java中如何检查内部类的所有权

java - 使用 printf() 将输出格式化为网格

java - (Java) 无法捕获异常

java - 使用 GAE 生成字符串 ObjectId

c - 在数组声明中使用乘法宏

java - 集合中的通配符构造函数

java - 如何让内部类继承封闭类的泛型类型?

Java 泛型运行时实例化

java - 无法解析 setImageUrl

javascript - 检查多维对象是否为空