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

Afg*_*gan 3 java

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

List<String> strList = getCustomObjectList();//This is third part API
which resturn raw List
Run Code Online (Sandbox Code Playgroud)

现在我想获得list元素

String myStrValue = strList.get(0);
Run Code Online (Sandbox Code Playgroud)

在这里我得到了以下异常

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

现在我很想知道两件事

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

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

Era*_*ran 7

在编译时,编译器给你一个你正在(分配生不安全的分配警告List到一个List<String>变量),但分配接受向后兼容(第三方API包含getCustomObjectList()的方法可以仿制药是之前已经被写入在Java 5中介绍.

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