小编fro*_*SPb的帖子

为什么可以从Java中的参数化列表中找回"错误类型"的对象?

这是一段代码片段:

import java.util.*;
class Test
{
    public static void main(String[] args)
    {
        List<Integer> list = new ArrayList<>();
        addToList(list);
        Integer i = list.get(0); //#1 fails at run-time
        String s = list.get(0); //#2 fails at compile-time
        list.get(0); //#3 works fine
        System.out.println(list.get(0)); //#4 works fine, prints "string"
    }
    static void addToList(List list){
        list.add("string");
    }
}
Run Code Online (Sandbox Code Playgroud)

我理解为什么可以在参数化列表中插入String类的对象.

似乎我理解为什么代码标记#1#2失败.

但是,为什么#3#4工作?据我所知,编译器在类型擦除后添加了适当的强制转换,因此当我调用时list.get(0),此方法应该返回一个先前转换为Integer的Object.那么为什么在运行时没有ClassCastException出现在#3和#4?

java generics raw-types parameterized-types

22
推荐指数
3
解决办法
859
查看次数

标签 统计

generics ×1

java ×1

parameterized-types ×1

raw-types ×1