开心飞艇官网好程序员-千锋教育旗下高端IT职业教育品牌

400-811-9990
我的账户
好程序员

专注高端IT职业培训

亲爱的猿猿,欢迎!

已有账号,请

如尚未注册?

  • 客服QQ
  • 官方微信

    好程序员

    专注高端IT职业培训

[BigData] 好程序员大数据培训分享scala单列和伴生对象

[复制链接]
671 0
叶子老师 发表于 2019-8-21 14:40:45 | 只看该作者 |阅读模式 打印 上一主题 下一主题
好程序员大数据培训分享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://cdxfjz.com/

精彩内容,一键分享给更多人!
收藏
收藏0
转播
转播
分享
淘帖0
支持
支持0
反对
反对0
回复

使用道具 举报

您需要登录后才可以回帖

本版积分规则

关注我们
千锋好程序员

开心飞艇官网北京校区(总部):北京市海淀区宝盛北里西区28号中关村智诚科创大厦

深圳西部硅谷校区:深圳市宝安区宝安大道5010号深圳西部硅谷B座A区605-619

杭州龙驰智慧谷校区:浙江省杭州市下沙经济技术开发区元成路199号龙驰智慧谷B座7层

开心飞艇官网郑州校区:郑州市二七区航海中路60号海为科技园C区10层、12层

Copyright 2007-2019 北京千锋互联科技有限公司 .All Right

开心飞艇官网京ICP备12003911号-5 京公安网11010802011455号

开心飞艇官网请您保持通讯畅通1对1咨询马上开启