【问题标题】:Collection <?> in ScalaScala 中的集合 <?>
【发布时间】:2013-06-15 06:42:03
【问题描述】:

我刚开始学习 Scala,并有一点 Java 经验。我想知道,Java 的 Collection &lt;?&gt; args 之一的 Scala 数据类型是什么?

【问题讨论】:

    标签: java scala


    【解决方案1】:

    首先,Scala 集合与 Java 集合形成了独立的库。当然,你可以使用 Scala 中的 Java 集合,但这通常是在与一些 Java API 互操作的代码中完成的,而纯 Scala 代码通常使用 Scala 集合。

    至于您的问题,通配符在 Scala 中用下划线字符表示,所以是的,Java 类 java.util.Collection&lt;?&gt; 在 Scala 中看起来像 java.util.Collection[_]

    顺便说一句,如果你想要类型边界,也就是 Collection&lt;? extends SomeClass&gt; 之类的东西,那么它们可以通过以下语法实现:

    Collection<? extends SomeClass>   ->   Collection[_ <: SomeClass]
    Comparator<? super SomeClass>     ->   Comparator[_ >: SomeClass]
    

    但是,正如我所说,您最好不要在纯 Scala 代码中使用 Java 集合,因为它们比 Scala 对应物更不方便。 Scala 集合具有更复杂的层次结构,但没有与 Java Collection 直接等效的对象。你可以阅读 this Scala 集合的优秀教程,尤其是 this 页面,它显示了 Scala 集合的层次结构。

    【讨论】:

      【解决方案2】:
      Collection <?> args
      

      写作Collection(读作“未知的集合”),即元素类型匹配任何东西的集合。出于显而易见的原因,它被称为通配符类型。

      Read more about wildcards here

      对于Scala Existential typesUsage of WildCards in Scala

      【讨论】:

      • 我问了一个问题:“我想知道,对于 Java 的 Collection > args 之一,Scala 的数据类型是什么?”
      • 那么它将是Collection[_]?
      猜你喜欢
      • 2013-07-03
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-04
      相关资源
      最近更新 更多