下面是我写的一个Java代码,
我知道24行的直接转换是不行的,因为内部数组本质是一个Object[]的数组,但是运行该程序是会报错的,报错的位置是在25行,错误信息是类型转换错误。但是26行这样的写法是没有问题的,如果将25行注释掉,程序可以正常运行。我想知道的是25和26行代码区别在哪里,为什么25行是会报错的,是编译器做了什么事情吗?我看过这个源代码编译后的class文件,25行加入了一个类型检查,但是为什么会加上类型检查?挺急的,跪求大神解答。
源代码如下:
public class GenericArray {
private Object[] array;
public GenericArray(int size) {
array = new Object[size];
}
public void put(int index, T item) {
array[index] = item;
}
public T get(int index) {
return (T) array[index];
}
public T[] rep() {
return (T[]) array;
}
public static void main(String[] args) {
GenericArray<Integer> ga = new GenericArray<>(10);
for(int i = 0; i < 10; i++) {
ga.put(i, i);
}
for(int i = 0; i < 10; i++) {
System.out.println(ga.get(i) + " ");
}
System.out.println();
try {
System.out.println(ga.rep().toString());
System.out.println(((Object)ga.rep()).toString());
} catch(Exception e) {
e.printStackTrace();
}
}
}