【问题标题】:Scala: companion object purpose [duplicate]Scala:伴随对象的目的[重复]
【发布时间】:2012-03-21 13:53:33
【问题描述】:

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

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

再次提前感谢您的所有回复。

【问题讨论】:

标签: class scala object


【解决方案1】:

需要伴随对象:

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

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

【讨论】:

  • 那么在布尔值的情况下,box/unbox 对 Java 起到类静态方法的作用?在 Java 中我们会有 Boolean.Box(boolean b) 定义?
  • 如果您在 Java 程序中使用 Scala 标准库,您会看到 box 方法是一个静态方法。
猜你喜欢
  • 2016-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-24
  • 2018-02-06
  • 2014-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多