对象
Scala中的object
object 相当于 class 的单个实例,通常在里面放一些静态的 field 或者 method;
在Scala中没有静态方法和静态字段,但是可以使用object这个语法结构来达到同样的目的。
object作用:
- 存放工具方法和常量
- 高效共享单个不可变的实例
- 单例模式
举例说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| package com.yi.clasz
class Session {}
object SessionFactory{ val session = new Session()
def getSession(): Session ={ session } }
object SessionDemo{ def main(args: Array[String]): Unit = { val session1 = SessionFactory.getSession() val session2 = SessionFactory.getSession() println(session1) println(session2) } }
|
结果
1 2
| com.yi.clasz.Session@2be94b0f com.yi.clasz.Session@2be94b0f
|
Scala中的伴生对象
如果有一个class文件,还有一个与class同名的object文件,那么就称这个object是class的伴生对象,class是object的伴生类。
- 伴生类和伴生对象必须存放在一个.scala文件中;
- 伴生类和伴生对象的最大特点是,可以相互访问;
举例说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| package com.yi.clasz
class Dao { val id = 1 private var name = "旺财"
def printName(): Unit = { println(Dao.COUSTANT + name) } }
object Dao { private val COUSTANT = "汪汪汪。。。" def main(args: Array[String]): Unit = { val p = new Dao
p.name = "大旺财" p.printName() } }
|
结果
Scala中的apply方法
- object 中非常重要的一个特殊方法,就是apply方法;
- apply方法通常是在伴生对象中实现的,其目的是,通过伴生类的构造函数功能,来实现伴生对象的构造函数功能;
- 通常我们会在类的伴生对象中定义apply方法,当遇到类名(参数1,…参数n)时apply方法会被调用;//ctrl+n
- 在创建伴生对象或伴生类的对象时,通常不会使用new class/class() 的方式,而是直接使用 class(),隐式的调用伴生对象的 apply 方法,这样会让对象创建的更加简洁;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
object ApplyApp { def main(args: Array[String]): Unit = { val ap = new ApplyTest
for (_ <- 1.to(10)){ ApplyTest.incr1() ap.incr2() }
println(ApplyTest.count1) println(ap.count2) } }
object ApplyTest { var count1 = 0
def incr1(): Unit ={ count1 += 1 } }
class ApplyTest{ var count2 = 0
def incr2(): Unit ={ count2 += 1 } }
|
结果