所以我读到App trait有以下字段:
def delayedInit(body: ? Unit): Unit
val executionStart: Long
def main(args: Array[String]): Unit
Run Code Online (Sandbox Code Playgroud)
我知道如果一个特征只有一个方法,通过在类声明中的花括号之间"放置代码",我将覆盖它.但在这里我有两种方法.那么为什么我自动覆盖主要而不是延迟?
sen*_*nia 11
你不是最重要的main方法.
由于Appextends DelayedInit编译器重写您的代码,如下所示:
// Before:
object Test extends App {
println("test")
}
// After:
object Test extends App {
delayedInit{println("test")}
}
Run Code Online (Sandbox Code Playgroud)
来自DelayedInit 文档:
继承
DelayedInit标记特征的类和对象(但注意,而不是特征) 将按如下方式重写其初始化代码:code变为delayedInit(code).
App特征实现 delayedInit如下:
override def delayedInit(body: => Unit) {
initCode += (() => body)
}
Run Code Online (Sandbox Code Playgroud)
因此在Test对象构造函数中,代码println("test")存储为字段中的function(() => Unit)initCode.
main方法App实现为对initCode字段中存储的所有函数的调用:
for (proc <- initCode) proc()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1888 次 |
| 最近记录: |