Scala:伴侣对象的目的

时间:2012-03-21 13:53:33

标签: class scala object

  

可能重复:
  What is the rationale behind having companion objects in Scala?

感谢我之前发布的所有回复(Scala: companion objects and "new" keyword)。我想问一下Scala中伴随对象的一般用途是什么? 首先,我们是否可以在类本身的构造函数/方法定义的形式中包含所有方法,例如apply? 此外,伴随布尔对象的重点是什么,因为它甚至没有定义apply方法?

再次感谢您的所有回复。

1 个答案:

答案 0 :(得分:18)

需要伴随对象:

  • 声明与companion的类相关的方法,否则这些方法是静态的(与Java不同,你不能在Scala中声明类本身内的静态方法)
  • 声明unapplyunapplySeq方法以定义模式匹配的自定义提取器(请参阅here
  • 声明apply方法,该方法通常用作创建特定类对象的工厂方法(但不一定是)
  • 伴侣对象可以访问其伴侣特征/类的私有字段和方法 - 对于在特定特征/类上创建静态操作非常有用
  • 它们对implicit resolution很重要 - 在查找某种类型的隐含值时,会检查该类型的伴随对象,看是否存在相应的implicit定义;请参阅Scala specification中隐式解决方案的确切规则或this blog post
  • 中的简短摘要

Scala标准库中的Boolean对象提供了用于在原始布尔值及其包装的对象表示之间进行转换的方法boxunbox。它另外(当前)用作@specialized注释的参数,以表示该类需要专门研究的原始类型。