千家信息网

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

发表于:2025-02-06 作者:千家信息网编辑
千家信息网最后更新 2025年02月06日,好程序员大数据学习路线分享scala单列和伴生对象scala单例object SingletonDemo {def main(args: Array[String]): Unit = {val s =
千家信息网最后更新 2025年02月06日好程序员大数据学习路线分享scala单列和伴生对象

好程序员大数据学习路线分享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

privateval name = "zhaoxiaodan"

def printContent() = {

println(name+companionObject.Constant)

}

}

object companionObject {

privateval 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")

}

}

}

0