我遇到了一个有趣的问题,我从一些包含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
现在我很想知道两件事
Genrics是编译时类型检查的概念,然后它是如何在运行时抛出异常的?
如何在这种情况下完成运行时类型转换?
在编译时,编译器给你一个你正在(分配生不安全的分配警告List到一个List<String>变量),但分配接受向后兼容(第三方API包含getCustomObjectList()的方法可以仿制药是之前已经被写入在Java 5中介绍.
在运行时strList.get(0)返回Object,但Object被转换为String因List<String>的类型strList.执行转换的代码由编译器在编译时添加,但仅在运行时执行转换,如果运行时类型strList.get(0)不是,则抛出异常String.