反射数组如何实现类型安全?

问题描述 投票:0回答:1

Util 数组代码

int arraySize=5;
Object[] arr=(Object[])Array.newInstance(int.class,arraySize);
Array.set(arr,0,0);
Array.set(arr,1,1);
Array.set(arr,2,2);
Array.set(arr,3,"Drashti");
for(int i=0;i<arraySize;i++){
    System.out.println(Array.get(arr,i));
}

反映数组代码

int arraySize=5;
Object[] arr=(Object[])Array.newInstance(String.class,arraySize);
Array.set(arr,0,"Drashti");
Array.set(arr,1,"Panseriya");
Array.set(arr,2,2);
Array.set(arr,3,"Drashti");
for(int i=0;i<arraySize;i++){
    System.out.println(Array.get(arr,i));
}

我预计它会给出编译时错误,但它没有,并显示运行时错误“无法转换为类对象”。同样,我在 util.Arrays 类中遇到运行时错误。那么为什么 util.Arrays 类数组不是类型安全的,而 Reflect.Array 类数组是类型安全的呢?

java arrays reflection type-safety
1个回答
0
投票

在您提供的 util.Arrays 代码和 Reflect Array 代码中, 您正在使用 Java 的反射 API 来动态创建和 操作数组。这两种方法本质上都不是类型安全的 因为您正在使用对象数组,然后尝试设置 这些数组中不同类型的元素。

© www.soinside.com 2019 - 2024. All rights reserved.