Scala:伴侣对象的目的

Bob*_*r02 13 scala class object

可能重复:
在Scala中拥有伴随对象的理由是什么?

感谢您对我之前帖子的所有回复(Scala:伴侣对象和"new"关键字).我想问一下Scala中伴随对象的一般用途是什么?首先,我们是否可以在类本身的构造函数/方法定义的形式中包含所有方法,例如apply?此外,伴随布尔对象有什么意义,因为它甚至没有定义apply方法?

再次感谢您的所有回复.

axe*_*l22 18

需要伴随对象:

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

BooleanScala标准库中的对象提供了方法box,unbox用于在原始布尔值及其包装的对象表示之间进行转换.它另外(当前)用作@specialized注释的参数,以表示该类需要专门处理哪些基本类型.