繁体   English   中英

为什么在Java中将字符串添加到ArrayLists所需的转换或使用泛型?

[英]Why is either casting or the use of generics necessary for adding Strings to ArrayLists in Java?

我正在尝试理解ArrayLists,并且在此过程中已经意识到我还需要了解泛型,原始类型以及有关类型转换的更多信息。 我正在阅读Oracle教程 ,这是他们为泛型有用的原因提供的示例:

以下没有泛型的代码片段需要强制转换:

List list = new ArrayList();
list.add("hello");
String s = (String) list.get(0);

我不明白为什么这里需要类型转换,因为据我所知,'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);

所以我要求解释为什么在这里需要类型转换,在这里通常是非通用的Arraylists。

运行时类型String ,但编译时类型Object 编译器不知道原始ArrayList含义,因此当您调用get()它会分配编译时类型的Object 无法将Object直接分配给String ,因此无需转换。

演员是开发人员对编译器说的方式,“你认为它是Object的列表,但是相信我,我正在拔出的东西绝对是String 。”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM