gpt4 book ai didi

java - 为什么在 Java 中使用泛型时必须指定

转载 作者:行者123 更新时间:2023-12-01 06:28:30 24 4
gpt4 key购买 nike

尽管我在 C++ 和其他语言方面有丰富的经验,但我对 Java 还很陌生。所以模板/泛型不是我不知道的东西。

有件事让我困扰,那就是这个<?>有人告诉我,每当我使用某事物的通用实例时,当我事先不知道它将是什么特定类型时,我应该使用它:

喜欢:

List< MyGeneric >    foo; // bad
List< MyGeneric<?> > bar; // good

当使用第一个表达式时,IntelliJ 不会对我呕吐,而且我不明白为什么它应该这样做。我的同事表示第二个表达式好多了,但无法告诉我确切的原因。

我的意思是,除了第二个明确表明它是我们操纵的泛型这一事实之外,这两者之间到底有什么区别?

编译器在编译时当然知道它是一个泛型,所以猜测第二个表达式更好,因为它告诉程序员他正在操作一个通用的。

我说得对吗?

编辑:为了澄清起见,我显然使用了最严格的类型,例如 List<MyGeneric<Double>> ,每当我提前知道我要在那里存储什么时。我的问题是当我存储未知类型的泛型时。

最佳答案

每次每次?它并不总是适用,也不总是有意义。

让我们描述一下它实际上是什么:<?>unbound wildcard ,这立即意味着两件事:

  • MyGeneric是一个泛型类,但是
  • 不知道它持有什么类型(这可能并不重要)。

它比第一个表达式更可取,因为第一个表达式始终保证您将使用 raw type ,并且您确实不想使用原始类型。然而,如果认为每次都使用未绑定(bind)的通配符是理想的,那就太笼统了。

如果您确实知道或关心该类型,或者知道或关心其边界,请使用它。

关于java - 为什么在 Java 中使用泛型时必须指定 <?>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37385220/

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