作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对应标题,我的问题是获取一个泛型数组的array-length,它在一个类的实例中,这个类的实例已经用这个泛型类型初始化了。当我想获取数组的长度 (ak.array.length) 时,java 会抛出此错误:
线程“main”中的异常 java.lang.ClassCastException: [Ljava.lang.Object;不能转换为 [Ljava.lang.String; 在 Testclass.main(Testclass.java:15)
那么这段代码中我的错误在哪里?提前致谢
public class Testclass {
static class ArrayKeeper<T> {
protected T[] array;
public ArrayKeeper() {
array = (T[])new Object[5];
}
}
public static void main(String[] args) {
//create a new instance of inner class ArrayKepper (type String)
Testclass.ArrayKeeper<String> ak = new Testclass.ArrayKeeper<String>();
System.out.println(ak.array.length); //cast error here.
}
}
最佳答案
问题出在这一行:
array = (T[]) new Object[5];
这不是创建通用数组的方法,您创建的是 Object[]
而不是您想要的 String[]
。您不能创建一个 Object[]
然后将其转换为您想要的任何类型,您必须创建一个正确类的数组。试试这个:
public ArrayKeeper(Class<T> clazz, int size) {
array = (T[]) Array.newInstance(clazz, size);
}
然后,当您需要实例化一个 ArrayKeeper
时,请执行以下操作:
Testclass.ArrayKeeper<String> ak =
new Testclass.ArrayKeeper<String>(String.class, 5);
关于Java 泛型转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10706234/
我是一名优秀的程序员,十分优秀!