Ron*_*ald 3 java string generics casting
我正在尝试理解ArrayLists,并且在此过程中已经意识到我还需要了解泛型,原始类型以及有关类型转换的更多信息.我正在阅读Oracle教程,这是他们为泛型有用的原因提供的示例:
以下没有泛型的代码片段需要强制转换:
List list = new ArrayList();
list.add("hello");
String s = (String) list.get(0);
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这里需要类型转换,因为据我所知,'list.get(0)'在类型转换之前和之后都是'String'类型.我在这里使用代码检查类型,不确定它是否正确.
List list = new ArrayList();
list.add("hello");
Object obj= list.get(0);
Class cls=obj.getClass();
String answer = cls.getSimpleName();
System.out.println(answer);
String s = (String) list.get(0);
Object obj2= list.get(0);
Class cls2=obj2.getClass();
System.out.println(cls2);
String answer2 = cls2.getSimpleName();
System.out.println(answer2);
Run Code Online (Sandbox Code Playgroud)
所以我要求解释为什么在这里需要类型转换,在这里通常是非通用的Arraylists.
在运行时类型为String,但是编译时类型为Object.编译器不知道raw ArrayList持有什么,所以当你调用get()它时,它会分配一个编译时类型Object.一个Object不能被直接分配给String,从而铸造.
演员是开发人员对编译器说的方式,"你认为它是一个Objects 的列表,但是相信我,我正在推出的东西绝对是一个String."
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |