(一)apply的基本使用
在 Scala 中,apply 方法放在类的伴生对象(object)里,主要起到 工厂方法的作用,能够让使用者在创建该类实例时省去显式的 new 关键字,并且可以通过重载提供多种构造方式。
当写ClassName(arg1,arg2)时,编译器会自动翻译ClassName.apply(arg1,arg2),这可以让实例化代码更简单。
package level02
/*
* apply
* 作用:写在伴生对象中,就可以允许创建对象的时候,省略new
*
*/
object Class10 {
// 伴生类
class Logger(){}
//伴生对象
object Logger {
def apply():Logger = {
println("logger.....")
new Logger()
}
}
def main(args:Array[String]): Unit = {
// 创建一个类的对象
// val log1 = new Logger()
//在伴生对象中提供了apply方法,那么这里就自动去调用它
val log1 = Logger()
val log2 = Logger()
println(log1 == log2)
}
}
(二)apply实现单例模式
package level02
/*
* apply
* 作用:写在伴生对象中,就可以允许创建对象的时候,省略new
*
*/
object Class10 {
// 伴生类
class Logger(){}
//伴生对象
object Logger {
val instance = new Logger()
def apply():Logger = {
println("logger.....")
instance
}
}
def main(args:Array[String]): Unit = {
// 创建一个类的对象
// val log1 = new Logger()
//在伴生对象中提供了apply方法,那么这里就自动去调用它
val log1 = Logger()
val log2 = Logger()
println(log1 == log2) //这里会输出什么true,因为他得到的都是同一个对象。
}
}