gpt4 book ai didi

java - 泛型困惑

转载 作者:行者123 更新时间:2023-11-30 01:40:03 26 4
gpt4 key购买 nike

以下是 Kathy 和 Bert Bates SCJP 5 准备 CD 提出的问题。我也在其他地方发布过这个,但直到现在还没有得到令人满意的解释......请帮助我理解这一点:

public class BackLister {  
//Insert code here
{
List<T> output=new LinkedList<T>();
for(T t:input)
output.add(0,t);
return output;
}
}

以下哪项可以插入//Insert code here

  • Apublic static <T> List<T> backwards(List<T> input)
  • Bpublic static <T> List<T> backwards(List<? extends T> input)
  • Cpublic static <T> List<T> backwards(List<? super T> input)
  • Dpublic static <T> List<? extends T> backwards(List<T> input)
  • Epublic static <T> List<? super T> backwards(List<T> input)
  • Fpublic static <? extends T> List<T> backwards(List<T> input)

我明白A和B是正确的;然而,不为什么D和E也是对的。可见C、F也不正确。谁能告诉我为什么 D 和 E 是正确的。

最佳答案

答案 D,public static <T> List <? extends T> backwards(List <T> input) ,返回一个可以包含类型 T 的列表或其任何子类。因为它可以容纳T ,它可以保存输入中的任何元素,并且从这个意义上来说是“正确的”。

答案E,public static <T> List <? super T> backwards(List <T> input) ,类似,但返回一个可以容纳 T 的列表或任何 super 类。由于它也可以容纳输入元素,因此它也是“正确的”。

选择这些替代方案之一将影响用户可能期望对结果列表执行的操作。

  • List<? extends T>输出,可以迭代列表并将每个元素分配给 T 类型的变量,但没有元素,即使是 T 类型的元素,可以安全地添加到 List 。 (有人可能会将此列表称为 List<SubT> ,并且在尝试将 ClassCastException 检索为 T 时会得到 SubT 。)

  • List<? super T>输出,可以安全地将元素添加到 List如果它们的类型为T 。但是,列表中的元素只能安全地分配给 Object 类型的变量。 。 (有人可能会将此列表称为 List<Object> ,并添加 Object 的实例或 T 的其他父类(super class))。

  • List<T> ,可以安全地将列表的元素分配给 T 类型的变量,并且可以添加 T 类型的元素到列表中(假设它是一个可修改的 List 实现)。

关于java - 泛型困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/880056/

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