Scala单例对象、伴生对象实战详解

1、Scala单例对象 
Scala单例对象是十分重要的,没有像在Java一样,有静态类、静态成员、静态方法,但是Scala提供了object对象,这个object对象类似于Java的静态类,它的成员、它的方法都默认是静态的。

 

//如果object的静态成员要被外界访问,则该成员不能被private修饰

object University{

  private var studentNo = 0

  def newStudentNo = { studentNo += 1 studentNo }

}

object objecOps { def main (args : Array[String]) : Unit = {

  println(University.newStudentNo) println(University.newStudentNo) }

}

2、Scala伴生对象 
如果有同样一个类与该object名字一样,则称该object为该类的伴生对象,相对应,该类为object的伴生类。如果一个类有它的伴生对象,这个类就可通过object的名字访问到所有成员,但object不在该类的作用范围。

class University{
val id = University.newStudentNo
private var number = 0
def aClass (number : Int){this.number += number}
}

object University {
   private var studentNo = 0
   def newStudentNo = {
   studentNo += 1
   studentNo
   }
 }

object对象为静态常量、静态变量区域,可以直接调用,共享全局变量很有意义,伴生对象方便类的构建,可做为当前类的静态方法、成员的集合。 

  • 伴生对象与伴生类在Scala的面向对象编程方法中占据极其重要的位置,例如Scala中许多工具方法都是由伴 生对象提供的。
  • 伴生对象与伴生类

 

 

伴生对象首先是一个单例对象,单例对象用关键字object定义。在Scala中,单例对象分为两种,一种是并未自动关联到特定类上的单例对象,称为独立对象 
(Standalone Object);另一种是关联到一个类上的单例对象,该单例对象与该类共有相同名字,则这种单例对象称为伴生对象(Companion 
Object),对应类称为伴生类。

 

 

 

 

 

这是一个典型的伴生类和伴生对象的例子,注意以下说明:

    • 伴生类Person的构造函数定义为private,虽然这不是必须的,却可以有效防止外部实例化Person类,使得Person类只能供对应伴生对象使用;
    • 每个类都可以有伴生对象,伴生类与伴生对象写在同一个文件中;
    • 在伴生类中,可以访问伴生对象的private字段Person.uniqueSkill;
    • 而在伴生对象中,也可以访问伴生类的private方法 
      Person.getUniqueSkill();
    • 最后,在外部不用实例化,直接通过伴生对象访问Person.printUniqueSkill()方法
posted @ 2016-06-23 08:56  @消失后  阅读(22592)  评论(0编辑  收藏  举报