Scala入门--单例对象object
Posted 后端技术前瞻
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala入门--单例对象object相关的知识,希望对你有一定的参考价值。
scala 中的单例对象何java 中的静态对象提供相同的功能,单例对象中的字段和方法都是静态的
只要定义了单例对象,不需要进行实例化就可以进行使用其中的成员字段、方法;
例如:
object Person {
private var lastId=0 //一个人的身份编号
def newPerson()={
lastId+=1
lastId
}
}
object App{
def main(args: Array[String]): Unit = {
println(Person.newPerson()) //输出结果 1
println(Person.newPerson()) //输出结果 2
}
}
单例对象分为:
伴生对象:同一个代码文件中,拥有两个相同名的object 和 class
则互为伴生关系。单例对象与同类名对象则可以访问对方内部的成员
孤立对象: 一个代码文件没有与只同名class 的object 对象;
class Person(val name:String){
private val id = Person.newPerson()// 调用了伴生对象中的方法
def info(): Unit ={
printf("The id of %s is %d.\n",name,id)
}
}
object Person {
private var lastId=0 //一个人的身份编号
def newPerson()={
lastId+=1
lastId
}
}
对象apply() 方法
类似:
val myStrArr = Array("BigData","Hadoop","Spark")//Scala 会自动调用Array这个类的伴生对象的apply方法
apply 方法调用约定
用括号传递给类实例或单例对象名一个或多个参数时
Scala 会在相应的类或对象中查找方法名为apply且 参数列表与传入的参数一致的方法
并用传入的参数来调用该apply 方法
class TestApplyClass {
def apply(param:String) {
println("apply method called: "+param)
}
}
object Test{
def main(args: Array[String]): Unit = {
val myObject = new TestApplyClass
myObject("Hello Apply1")//apply method called: Hello Apply1
myObject.apply("Hello Apply2")//apply method called: Hello Apply2
}
}
1、一个 class 一个类
2、给类定义一个伴生对象
3、类的构造方法以apply方法的形式写在伴生对象中
4、伴生对象的方法会被自动调用
5、调用会自动生成类对象
class Car(name:String) {
def info(): Unit ={
println("Car name is"+name)
}
}
object Car{
def apply(name: String): Car = new Car(name)
}
object MyTestApply{
def main(args: Array[String]): Unit = {
val myCar = Car("BMW")
myCar.info()//输出结果为:Car name isBMW
}
}
对象 update 方法
val myStrArr = new Array[String](3)
myStrArr(0) = "BigData" //实际上调用了伴生类Array中的update 方法,执行myStrArr.update(0,"BigData")
unapply() 方法:
unapply方法是对对象属性反向解构的过程
class Car(val brand:String,val price:Int){
def info(): Unit ={
println("Car brand is"+brand+"and price is"+price)
}
}
object Car{
def apply(brand:String,price:Int)={
println("Debug:calling apply...")
new Car(brand,price)
}
def unapply(c: Car): Option[(String, Int)] = {
println("Debug:calling unapply...")
Some(c.brand,c.price)//将属性解析出来
}
}
object TestUnapply {
def main(args: Array[String]): Unit = {
var Car(carbrand,carprice) = Car("BMW",800000)
// 输出结果://Debug:calling apply...
//Debug:calling unapply...
//brand:BMW and carprice:800000
println("brand:"+carbrand+" and carprice:"+carprice)
}
}
以上是关于Scala入门--单例对象object的主要内容,如果未能解决你的问题,请参考以下文章