一.apply
- 作用:写在伴生对象中,就可以允许创建对象的时候,省略new
- 在伴生对象中提供了apply方法,那么这里就会自动调用它
// 伴生类:必须与伴生对象在同一个文件、同一个包下,且名称完全一致
class Logger() {}
// 伴生对象:与伴生类同名,在同一个包下(无需嵌套在 class11 对象中)
object Logger {
def apply(): Logger = {
println("logger")
new Logger() // 每次调用 apply 都会创建新的 Logger 实例
}
}
// 程序入口:独立的 object(Scala 中 main 方法必须放在 object 中)
object Class11 {
def main(args: Array[String]): Unit = {
val log1 = Logger() // 等价于 Logger.apply(),调用伴生对象的 apply 方法
val log2 = Logger()
println(log1 == log2) // 比较两个实例的引用是否相同
}
}
二.apply实现单例模式
object Logger {
val instance = new Logger()
def apply(): Logger = {
println("logger")
instance
new Logger() // 每次调用 apply 都会创建新的 Logger 实例
}