Scala类之单例对象、伴生对象、Apply方法
单例对象:Scala不能定义静态成员,而是代之定义单例对象(singleton object)。
以object关键字定义,对象定义了某个类的单个实例。
伴生对象:当单例对象与某个类共享同一个名称时,它就被称为是这个类的伴生对象(companion object)。
这个类可以访问伴生对象的所有成员。
代码示例:
class University{
val id = University.newStudentNo
private var number = 0
def aClass(number: Int){this.number += number}
}
//与类同名,亦为University类的伴生对象
object University{ //被使用时才加载
private var studentNo = 0
def newStudentNo = { //想被外部使用则不能声明为private
studentNo += 1
studentNo
}
}
object test {
def main(args: Array[String]): Unit = {
print(University.newStudentNo + " ")
print(University.newStudentNo + " ")
print(University.newStudentNo + " ")
print(University.newStudentNo + " ")
print(University.newStudentNo + " ")
}
}
//运行结果:
1 2 3 4 5
Apply方法常用示例程序:
class Apply{
def apply() = println("我在学习Spark。")
def haveATry{
println("Have a try on apply!")
}
}
object Apply{
def apply() = {
println("我在学习Scala。")
new Apply //返回Apply类的对象实例
}
}
object ApplyTest {
def main(args: Array[String]): Unit = {
val array = Array(1,2,3,4,5)
//类名后加括号,相当于调用伴生对象的apply方法
val a = Apply()
a.haveATry
println
//对象加括号相当于调用对象的apply方法
println(a())
}
}
//运行结果:
我在学习Scala。
Have a try on apply!
我在学习Spark。
()