我正在阅读 Scala List API .我无法弄清楚下面的伴随功能的用途。
def companion : GenericCompanion[List]
The factory companion object that builds instances of class List.
似乎是为了List中的一些功能,而不是让终端用户直接消费的。如果是这样,人们怎么知道该功能是否不由应用程序开发人员直接使用?当然,这只是我有根据的假设,如果我错了,希望得到纠正。
请您参考如下方法:
在不知道集合库中设计选择的细节的情况下,我想我可以在这里看到两个用途:
干燥。有点内部但有一个伴随对象充当来自特定类型 Builder 的工厂建筑是集合库中的常见模式,因此将其重构为每个集合实现组成的类可以减少重复。
抽象。公开“伙伴”为客户端代码提供了一种构造与实例相同类型的新集合的方法,而不必知道该类型是什么。如果您想创建返回一致类型的更通用的集合处理函数,这将很有用。
以下是它可能有用的一些示例:
scala> val a: Traversable[Int] = Set(1,2,3,4) a: Traversable[Int] = Set(1, 2, 3, 4) scala> a.companion(1,2,3) res1: Traversable[Int] = Set(1, 2, 3) scala> val b: Traversable[Int] = List(1,2,3,4) b: Traversable[Int] = List(1, 2, 3, 4) scala> b.companion(1,2,3) res2: Traversable[Int] = List(1, 2, 3) scala> def ends[T](c: Traversable[T]) : Traversable[T]= { | c.companion(c.head, c.last) | } ends: [T](c: Traversable[T])Traversable[T] scala> ends[Int](List(1,2,3,4,5)) res3: Traversable[Int] = List(1, 5) scala> ends[Int](Set(1,2,3,4,5)) res4: Traversable[Int] = Set(5, 4)
请注意,“ends”不知道它接收到 Traversable 的哪个子类型,但能够返回使用同伴构建的兼容类型的新集合。