gpt4 book ai didi

java - wildcare 泛型参数与无泛型参数之间的区别

转载 作者:行者123 更新时间:2023-12-01 06:15:05 25 4
gpt4 key购买 nike

在Java中,有什么区别:

public void foo(List lst);

public void foo(List<?> lst);

最佳答案

第一个版本是“任何类型的列表”。这不通用,不安全,也不推荐。

第二个版本是“未知类型列表”。这意味着您将get最一般类型的对象 Object ,并且将无法add除了 null 之外的任何其他内容。因为当对类型一无所知时,这些是唯一类型安全的操作。

您可能认为版本版本更简洁,确实如此。然而,鸭子类型的语言往往更简洁,但这并不意味着它们是正确的选择。使用原始List仅由于向后兼容性才可能实现,并且您将收到编译器警告。

为了获得更多乐趣,请考虑以下类型,以及它们与您的两种类型有何不同:

  • foo(List<Object> list)
  • foo(List<? extends Object> list)
  • foo(List<? super Object> list)
  • foo(List<? super Iterable<? extends Object>> list)

关于java - wildcare 泛型参数与无泛型参数之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26806575/

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