java - 当我询问一个数组的长度时,我在 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];
}
}
解决方案
这里有几个问题:
- 你不能发起
Comparable
。 - 您的
T
课程扩展Comparable
,反之亦然。
要解决此问题,您可以使用:
elementos = (T[])Array.newInstance(type, size);
推荐阅读
- arrays - 在 jq 中,`.my_array` 和 `.my_array[]` 有什么区别?
- android - 为什么颤振应用程序中的图像是从painting.dart而不是images.dart导入的?
- python - 在 selenium 驱动程序选项卡之间切换,无需等待当前请求的响应
- html - 我想使用 css 将盒子放置在彼此附近,中间有空格
- linux - libstdc++.so.6:在 Linux 上找不到版本“GLIBCXX_3.4.26”
- javascript - 在大型 javascript 代码库中使用 codemods 将所有 let 变量声明更改为 const
- javascript - 当使用带有回调的 onClick 事件时,不会在反应中侦听 React 功能组件
- swiftui - SwiftUI 编辑/覆盖应用程序中的所有警报
- python - 使用 Python 列出 Json 数据
- c# - Unity 2D - 在两个(或更多)空间之间移动任何对象