首页 > 解决方案 > 当我询问一个数组的长度时,我在 java 中得到一个 ClassCastException,我该如何解决这个问题?

问题描述

当我在测试中询问长度时,我得到一个整数转换错误,我尝试使用其他类,如 Character 而不是 Integer,但我得到同样的错误,java 不允许我将 Object 或 Comparable 编写为参数化类。

这是一个 JUnit 测试用例

public class EDBinaryHeapTest {
    @Test
    public void constructorTest01() {
        EDBinaryHeap<Integer> toCheck = new EDBinaryHeap<Integer>(0);
        
        assertEquals(0, toCheck.numElementos);
        assertEquals(0, toCheck.elementos.length); 
    }
}

这就是我要检查的课程

 public class EDBinaryHeap<T extends Comparable<T>> implements EDPriorityQueue<T>{
    protected T[] elementos;
    protected int numElementos;

    @SuppressWarnings("unchecked")
    public EDBinaryHeap(int numMaxElementos) {
        elementos = (T[]) new Comparable[numMaxElementos];
    }
}

标签: javaclasscastexception

解决方案


这里有几个问题:

  1. 你不能发起Comparable
  2. 您的T课程扩展Comparable,反之亦然。

要解决此问题,您可以使用:

    elementos = (T[])Array.newInstance(type, size);

推荐阅读