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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了好程序员大数据学习路线分享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

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

????

??

以上是关于好程序员大数据学习路线分享scala单列和伴生对象的主要内容,如果未能解决你的问题,请参考以下文章

好程序员大数据学习路线分享Scala系列之泛型

好程序员大数据学习路线分享Scala系列之集合操作函数

好程序员大数据教程分享Scala系列之模式匹配和样例类

好程序员大数据学习路线分享高阶函数

大数据处理学习笔记1.7 Scala类与对象

好程序员大数据学习路线分享HDFS读流程