gpt4 book ai didi

java - 为什么在 Java 中将字符串添加到 ArrayList 需要强制转换或使用泛型?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:05:41 25 4
gpt4 key购买 nike

我正在努力理解 ArrayList,并且在这个过程中意识到我还需要理解泛型、原始类型以及更多关于类型转换的知识。我正在阅读 Oracle tutorial这是他们给出的为什么泛型有用的例子:

The following code snippet without generics requires casting:

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

我不明白的是为什么这里需要类型转换,因为据我所知,“list.get(0)”在类型转换之前和之后都是“String”类型。我使用了代码 here检查类型,不确定它是否正确。

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 。”

关于java - 为什么在 Java 中将字符串添加到 ArrayList 需要强制转换或使用泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51447022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com