scala 单例对象 伴生对象

本文介绍Scala中的单例对象及其实现方式,并详细解释伴生类与伴生对象的概念及其应用场景。通过实例展示了如何利用Scala特性进行高效编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步

1.单例对象

Scala中没有静态方法或静态字段,但可以使用object这个语法结构来实现相同的功能。Object与class在语法层面上很相似,除了不能提供构造器参数外,object可以拥有class的所有特性。

废话不多说,直接上代码

object Singleton {

  var count = 0

  def addCount:Long = {
    count += 1
    count
  }
}

object Client {
  def main(args: Array[String]): Unit = {
    println(Singleton.addCount)
    println(Singleton.addCount)
  }
}

让代码run起来

1
2

创建单例对象需要用Object关键字,而非Class。因为单例对象无法初始化,所以不能给它的主构造函数传递参数
单例一旦定义完毕,它的名字就表示了这个单例对象的唯一一个实例。单例可以传给函数,就像通常传递实例一样

2.伴生类与伴生对象

单例对象可以和类具有相同的名称,此时该对象也被称为“伴生对象”。
先看代码

class Person private(val name:String){
  private def getSkill() =
    name + "'s skill is: " + Person.skill
}

object Person {
  private val skill = "basketball"
  private val person = new Person("Tracy")
  def printSkill =
    println(person.getSkill())

  def main(args: Array[String]): Unit = {
    Person.printSkill
  }
}

将代码run起来

Tracy's skill is: basketball

Tricks:
1.伴生类Person的构造函数定义为private,虽然这不是必须的,却可以有效防止外部实例化Person类,使得Person类只能供对应伴生对象使用;
2.每个类都可以有伴生对象,伴生类与伴生对象写在同一个文件中;
3.在伴生类中,可以访问伴生对象的private字段Person.skill;
4.而在伴生对象中,也可以访问伴生类的private方法 Person.getSkill();
5.在外部不用实例化,直接通过伴生对象访问Person.printSkill()方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值