gpt4 book ai didi

java - 为什么 List 不能作为 List 接受?
转载 作者:太空宇宙 更新时间:2023-11-04 10:24:03 27 4
gpt4 key购买 nike

考虑下面的方法 doSomething(List<Object>)它接受 List<Object>作为参数。

private void doSomething(List<Object> list) {
// do something
}

现在考虑下面的代码片段,它尝试调用 doSomething()我试图通过的地方 List<String>doSomething()

List<Object> objectList;
List<String> stringList;

doSomething(stringList); // compilation error incompatible types
doSomething(objectList); // works fine

即使下面的代码也会引发编译错误

objectList = stringList;  // compilation error incompatible types

我的问题是为什么List<String>无法传递给接受 List<Object> 的方法?

最佳答案

因为虽然String延伸Object , List<String>不扩展List<Object>

更新:
一般来说,如果FooBar 的子类型(子类或子接口(interface)) ,和G是一些泛型类型声明,但 G<Foo> 并非如此是 G<Bar> 的子类型。

这是因为集合确实会发生变化。在你的情况下,如果 List<String>List<Object> 的子类型,然后输入 String 以外的内容当使用其父类(super class)型引用列表时,可以将其添加到其中,如下所示:

List<String> stringList = new ArrayList<String>;
List<Object> objectList = stringList;// this does compile only if List<String> where subtypes of List<Object>
objectList.add(new Object());
String s = stringList.get(0);// attempt to assign an Object to a String :O

Java 编译器必须防止这些情况。

关于this的更多阐述Java 教程页面。

关于java - 为什么 List<String> 不能作为 List<Object> 接受?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50756003/

27 4 0