使用通用阵列时出现异常?

时间:2017-05-26 13:44:41

标签: java generics

我使用以下代码创建一个通用的列表数组,以混合使用不同类型的列表:

List<Integer>[] intLists = (List<Integer>[])new List[] {Arrays.asList(1)}; 
List<? extends Object>[] objectList = intLists;
objectList[0] = Arrays.asList(1.01);
int n = objectList[0].get(0); // class cast exception!

但它给了我一个演员例外。 我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

我不确定这是否会产生编译错误,虽然它显然是在创建一个原始的列表数组并且在存储时似乎编译器无法检测到它的List数组(它无法检测列表的类型 - 所以也许它只是将它解释为原始列表)因此不会抛出错误,当您尝试将元素检索为整数时,它会在尝试将双精度转换为int时失败。这不是正确的用法。

我相信你可以做(Integer) listArray[0].get(0)但是它会导致浮点后的精度损失。

答案 1 :(得分:0)

objectList [0] .get(0)的类型;是Double,所以你必须将它转换为int。 以下作品:

int n = ((Double) objectList[0].get(0)).intValue();

但根据您的使用情况,您的代码不是很好。

答案 2 :(得分:0)

您尝试在整数变量中存储double值。你不能这样做。所以只需将它存储在双倍中:

        List<Integer>[] intLists = (List<Integer>[])new List[] {Arrays.asList(1)}; 
        List<? extends Object>[] objectList = intLists;
        objectList[0] = Arrays.asList(1.01);
        double n = (double) objectList[0].get(0); // Make it a double :)