gpt4 book ai didi

java - 为什么F 未分配给 F

转载 作者:行者123 更新时间:2023-11-29 07:50:07 28 4
gpt4 key购买 nike

这是一个 SSCCE :

import java.util.*;

class Test {
public static void main(String[] args) {
bar( foo() );
}

public static List<? extends CharSequence> foo() {
return null;
}

public static void bar(List<CharSequence> baz) {
// Nothing to see here
}
}

这导致

bar(java.util.List<java.lang.CharSequence>) in Test cannot be applied to (java.util.List<capture#672 of ? extends java.lang.CharSequence>)
  1. 这个示例是否有可能失败?安全投<? extends CharSequence><CharSequence> , 不是吗?
  2. 如果不通过转换,我应该如何解决这个问题(在更复杂的设置中)?

最佳答案

让我们使用标准示例。你有课

class Fruit{}
class Apple extends Fruit{}
class Banana extends Fruit{}

现在假设您有各种水果列表的引用,例如

List<? extends Fruit> list;

这个引用会让你持有的不只是Fruit列表还要AppleBanana列表。

List<? extends Fruit> list = new ArrayList<Apple>();
//lets say we add some apples here to list

你认为让List<Fruit>安全吗? List<? extends Fruit> 的句柄列表喜欢

List<Fruit> fruits = list;

想一想。通过List<Fruit> 您可以添加各种水果到列表中。这意味着您可以添加 Banana当前持有 Apples 的列表.

这就是为什么 Java 不允许您使用 foo() 的结果的原因这是 List<? extends CharSequence>作为 bar(List<CharSequence> baz) 的参数.

关于java - 为什么F<? extends Bar> 未分配给 F<Bar>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21804545/

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