gpt4 book ai didi

Java 泛型 - 允许混合类型吗?

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

我之前运行了一些测试,但找不到关于为什么这段代码会这样做的解释:

public class Test {
public static void main(String[] args) {
List<Integer> list = new ArrayList(Arrays.asList(Double.valueOf(0.1234)));
System.out.println(list.get(0)); //prints 0.1234
Object d = list.get(0);
System.out.println(d.getClass()); // prints class java.lang.Double
System.out.println(list.get(0).getClass()); // ClassCastException
}
}

这提出了几个问题:

  • 为什么 List 首先接受 Double(它应该编译)?
  • 为什么第二个打印品有效而不是第三个打印品,尽管看起来他们在做同样的事情?

编辑
我理解以下 2 个陈述:

List aList = new ArrayList(); //I can add any objects in there
List<Integer> aList = new ArrayList<Integer>(); //I can only add something that extends Integer in there

但我不明白为什么这个被授权以及为什么它实际上在运行时在某种程度上起作用,尽管有些操作会产生 ClassCastException - 我本以为上面发布的代码的第一行会出现 ClassCastException:

List<Integer> aList = new ArrayList(); //I can any objects in there

最佳答案

这个:

new ArrayList(Arrays.asList(Double.valueOf(0.1234)))

创建一个原始的(未类型化的)ArrayList,您可以在其中放置任何内容。这是正确的做法:

new ArrayList<Integer>(Arrays.asList(Double.valueOf(0.1234)))

现在不应该编译。

关于Java 泛型 - 允许混合类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8433969/

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