[英]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.