2012-03-21 85 views
12

可能重复:
What is the rationale behind having companion objects in Scala?斯卡拉:同伴对象宗旨

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

再次感谢您的所有答复。

+0

[下面的答案](http://stackoverflow.com/a/9806136/39396)比复制的接受答案要好。 – 2013-03-17 22:57:27

回答

18

伴侣对象需要:与同伴的类

  • 申报方法,否则是静态
  • 声明(不像在Java中,你不能在类本身在斯卡拉内声明的静态方法) unapplyunapplySeq方法来定义用于模式匹配的自定义提取器(请参阅here
  • 声明apply方法,该方法通常用作创建特定类的对象的工厂方法(但不一定是)
  • 同伴对象可以访问私有字段和它们的同伴特质/类的方法 - 寻找某一类型的隐含价值时 - 用于对特定性状/类
  • 他们正在为implicit resolution重要创建静态操作有用检查该类型的伴侣对象以查看是否存在对应的定义;看到在Scala specification隐含分辨率或一个简短的摘要的确切规则this blog post

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

+0

所以在布尔型的情况下,box/unbox扮演类似于Java的静态方法的角色?在Java中,我们可以使用Boolean.Box(boolean b)定义吗? – Bober02 2012-03-21 14:25:57

+1

如果您在Java程序中使用了Scala标准库,您会将'box'方法看作静态方法。 – axel22 2012-03-21 14:32:47