zoukankan      html  css  js  c++  java
  • 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()方法
  • 相关阅读:
    为什么要使用Handler
    使用Java中的Timer和TimerTask
    Top子句对查询计划的影响
    一个单表死锁的示例
    tracer token 追踪标记
    DDL Trigger
    事物复制的troubleshooting 1
    在分发服务器上查看信息
    将windows 2003 sp2的cluster升级到windows 2008 r2
    DistributionDB过大的原因
  • 原文地址:https://www.cnblogs.com/nethk/p/5609320.html
Copyright © 2011-2022 走看看