gpt4 book ai didi

java - 如何在 Java 中正确转换嵌套泛型类型

转载 作者:太空狗 更新时间:2023-10-29 22:47:25 26 4
gpt4 key购买 nike

在 Java 中我可以投:

List<?> j = null;
List<Integer> j2 = (List<Integer>)j;

那么为什么以下会失败?

List<List<?>> i = null;
List<List<Integer>> i2 = (List<List<Integer>>)i;

最佳答案

在您的第一个st 片段中:

List<?> j = null;
List<Integer> j2 = (List<Integer>)j;

编译器不会给你错误,因为List<?>List<Integer> 的父类(super class)型,因为通配符 "?" 表示的类型族是 Integer 的超集.所以你可以从 List<?> 执行类型转换至 List<Integer> (你可以说是沮丧),但编译器会向你显示一个未经检查的警告,以防止你被强制转换为 - List<Date>。至 List<Integer> .显示警告,因为由于类型删除,转换将在运行时成功。


在第二种情况下:

List<List<?>> i = null;
List<List<Integer>> i2 = (List<List<Integer>>)i;

这里是从 List<List<?>> 转换的(从这里开始用 FIRST 指代)到 List<List<Integer>> (从这里开始用 SECOND 指代)。

因为,FIRST 不是SECOND 的父类(super class)型,显然是因为 List<?> 表示的类型族(它可以是 List<Long>List<Date>List<String> 或任何东西)不是 List<Integer> 的超集.因此出现编译器错误

推荐阅读:

关于java - 如何在 Java 中正确转换嵌套泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18088392/

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