Scala学习笔记-00-单利对象、伴生对象、孤立对象
Scala采用单例对象(singleton object,即 object)来实现java静态成员同样的功能,即 object.方法/属性
伴生对象
单例对象中有一种比较特殊的情况:伴生对象, companion object。
当一个单例对象和它的同名类一起出现时,这个单利对象就被称为同名类的“伴生对象”,同样,这个类被称为该单利对象的伴生类。
类和伴生对象必须存在于同一个文件中,可以相互访问私有成员。
如 scala.io.Source 类 就有个 伴生对象,class Source 中没有 fromFile("***")的方法,object Source中有fromFile("***")的方法
https://www.scala-lang.org/api/2.11.12/#scala.io.Source:
https://www.scala-lang.org/api/2.11.12/#scala.io.Source$:

apply方法约定:将一个或多个参数用圆括号传递给类实例或单利对象名时,scala会在相应的类或对象中查找方法名为apply且参数列表与传入的参数一致的方法,并用传入的参数来调用该方法。
object Array中定义了对应的apply方法:https://www.scala-lang.org/api/2.11.12/#scala.Array$
伴生对象中的apply方法:将所有类的构造方法以apply方法的形式定义在伴生对象中,这样伴生对象就像生成类实例的工厂,这些apply方法被称为工厂方法。如下图:

val arr = Array(1,2,3,4)
scala自动调用Array类的伴生对象 object Array 中的一个apply方法,来创建一个Array对象arr
为什么要设计apply方法?
- 保持对象和函数之间使用的一致性
- 面向对象:“对象.函数” , 数学:“函数(参数)”
- scala中一切皆是对象,函数也是对象。scala的函数既保留函数名(参数) 的调用方式,也可以使用对象.方法的调用形式,其对应的方法名即为apply。
- scala的对象也可以看成函数,前提是该对象提供了apply方法
孤立对象
没有同名类的单例对象,叫做“孤立对象” (standalone object)。
一般,scala程序的入口点main方法定义在一个孤立对象中。

浙公网安备 33010602011771号