gpt4 book ai didi

java - 为什么字符串数组可以分配给对象数组,而字符串数组列表不能分配给对象数组列表?

转载 作者:行者123 更新时间:2023-12-04 10:19:13 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Is List<Dog> a subclass of List<Animal>? Why are Java generics not implicitly polymorphic?

(19 个回答)


去年关闭。




为什么在java中允许像第3行这样的东西而不允许第6行?

Object[] object= new Object[100];
String[] string= new String[100];
object=string; //line #3
List<Object> objectList = new ArrayList<>();
List<String> stringList = new ArrayList<>();
objectList=stringList;// line #6 [Error: Type mismatch: cannot convert from List<String> to List<Object>]

最佳答案

那是因为数组是协变的,而且 String[]Object[] 的子类型,因此分配 object = string;是合法的。但是如果你这样做:

object[0] = 1;

该语句编译良好,但是当您运行它时,您会收到此错误。

java.lang.ArrayStoreException: java.lang.Integer



相反,参数化类型是不变的。所以, List<String>既不是 List<Object> 的子类型也不是父类(super class)型并且您的编译器开始在分配站点 objectList = stringList; 上提示.但是,如果您需要在保持类型安全的同时使参数化类型协变,则可以使用通配符。例如,这编译得很好。
List<?> objectList = new ArrayList<>();
List<String> stringList = new ArrayList<>();
objectList = stringList;

关于java - 为什么字符串数组可以分配给对象数组,而字符串数组列表不能分配给对象数组列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60944410/

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