apply方法写在伴生对象中,可以在创建对象的时候,省略new关键字
val 对象 = 伴生类() <====> 伴生对象.apply()
class Person() {
}
object Person {
def apply(): Person = {
println("apply ......")
new Person()
}
}
def main(args: Array[String]): Unit = {
val p1 = Person()
val p2 = Person()
println(p1)
println(p2)
}
apply方法写在伴生对象中,可以在创建对象的时候,省略new关键字
class Person() {
println("主构造器被调用......")
}
object Person {
val p = new Person()
def apply():Person = {
p
}
}
def main(args: Array[String]): Unit = {
val p1 = Person()
val p2 = Person()
println(p1)
println(p2)
println(p1 == p2 )
}
实现一个日志类: Logger
import java.io.FileWriter
class Logger(filename: String) {
def log(content: String): Unit = {
val writer = new FileWriter(filename, true)
writer.write(content + "\n")
writer.close()
}
}
object Logger {
var instance: Option[Logger] = None
def apply(filename: String): Logger = {
if (instance.isEmpty) {
instance = Some(new Logger(filename))
}
instance.get
}
}
def main(args: Array[String]): Unit = {
val logger1 = Logger("test.log")
logger1.log("2005-11-4 09:06:03 上scala课")
logger1.log("2005-11-5 09:06:03 运动会")
logger1.log("2005-11-6 09:06:03 休息")
}