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方法定义在一个孤立对象中。

 

posted @ 2020-02-12 08:00  后山前堂客  阅读(469)  评论(0)    收藏  举报