gengen在运行时如何在java中运行?

时间:2018-04-24 10:11:56

标签: java

我遇到一个有趣的问题,我从一些包含CustomObject的第三方API调用中获取原始列表,并将该列表保存到String类型的genric列表中。

List<String> strList = getCustomObjectList();//This is third part API
which resturn raw List

现在我想获得列表元素

String myStrValue = strList.get(0);

这里我得到的是异常

  

java.lang.ClassCastException:   com.some.CustomObject无法强制转换为   java.lang.String中

现在我很想知道两件事

  1. Genrics是编译时类型检查的概念,然后它是如何在运行时抛出异常的?

  2. 如何在这种情况下完成运行时类型转换?

1 个答案:

答案 0 :(得分:7)

在编译时,编译器会向您发出有关您正在进行的不安全分配的警告(将原始List分配给List<String>变量),但接受该分配是为了向后兼容(第3版)包含getCustomObjectList()方法的派对API可能是在Java 5中引入泛型之前编写的。

在运行时strList.get(0)会返回Object,但由于Object类型的StringList<String>会投放到strList 。执行转换的代码由编译器在编译时添加,但仅在运行时执行转换,如果strList.get(0)的运行时类型不是String,则抛出异常