全国服务热线:400-6136-679

位置:石家庄达内IT培训学校 > 学校动态 > scala单列和伴生对象

scala单列和伴生对象

来源:石家庄达内IT培训学校时间:2022/5/11 16:43:56

  大数据学习路线分享scala单列和伴生对象

  scala单例

  object SingletonDemo {

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

  val s = SessionFactory

  println(s.getSession)

  println(s.getSession.size) //.size得到几个session对象

  }

  }

  object SessionFactory{

  println("SessionFactory 被执行了")

  //计数器

  var i = 5

  //存放session对象的数组

  val sessions = new ArrayBuffer[Session]()

  while(i>1){

  println("while被执行了")

  sessions.append(new Session)

  i -= 1

  }

  //获取session对象

  def getSession = sessions

  }

  class Session{

  }

  伴生对象

  单例对象包括伴生对象,类与伴生对象之间可以互相访问,即使被private修饰的私有字段和属性

  伴生对象首先是一个单例对象,单例对象用object定义

  在scala中,单例对象分两种

  1.关联并未自动关联到特定类的单例对象,称为独立对象 ->Standalone Object

  2.关联到一个类的单例对象,该单例对象与该类是同一个类名,称为伴生对象 ->Companion Object

  class companionObject {

  var id = 0

  private val name = "zhaoxiaodan"

  def printContent() = {

  println(name+companionObject.Constant)

  }

  }

  object companionObject {

  private val Constant = " is my goddess"

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

  val co = new companionObject

  co.id = 8

  println(co.id)

  println(co.name)

  co.printContent() //zhaoxiaodan is my goddess

  }

  }

  apply和unapply(通常在类的伴生对象中定义apply方法)

  apply方法通常被称为注入方法,在类的伴生对象中做一个初始化操作

  apply方法的参数列表不需要和主构造器列表统一

  unapply方法通常为提取方法,使用unapply方法可以提取构造器中固定数量的对象和值

  unapply方法会返回一个Option,如果Option里有值的话,内部会有一个some对象来封装这些值

  class ApplyDemo(val name: String, val age: Int, val faceValue: Int) {

  }

  object ApplyDemo {

  //注入方法

  def apply(name: String, age: Int): ApplyDemo = {

  new ApplyDemo(name,age,faceValue = 80) //初始化

  }

  //提取方法

  def unapply(applyDemo: ApplyDemo):Option[(String,Int,Int)]={

  if (applyDemo == null){

  None

  }else{

  Some(applyDemo.name,applyDemo.age,applyDemo.faceValue)

  }

  }

  }

  object ApplyTest{

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

  val applyDemo = ApplyDemo("赵晓丹",18)

  applyDemo match {

  case ApplyDemo("赵晓丹",age,faceValue) =>println(s"name:赵晓丹,age:$age,fv:$faceValue")

  case _=> println("is null")

  }

  }

  }

领取试听课
每天限量名额,先到先得

尊重原创文章,转载请注明出处与链接:http://www.peixun360.com/1672/news/523425/违者必究! 以上就是石家庄达内IT培训学校 小编为您整理 scala单列和伴生对象的全部内容。

温馨提示:提交留言后老师会第一时间与您联系!热线电话:400-6136-679