我已经删除了该方法,因此它没有逻辑意义,但我只是试图解决编译错误
def getVWAP(date: Date, maxEvents: Int): Double = {
var startDateTime = null;
if (maxEvents > 0) {
startDateTime = date; // error
}
0.0
}
Run Code Online (Sandbox Code Playgroud)
Emi*_*Sit 10
Scala使用类型推断来推断变量的类型startDateTime,您没有为其指定类型.因此,Scala发出以下错误:
error: type mismatch;
found : Date
required: Null
startDateTime = date; // error
Run Code Online (Sandbox Code Playgroud)
这说,它认为startDateTime应该是Null类型,但是你给它一个Date.
修复方法是显式键入startDateTime如下:
var startDateTime : Date = /* some sort of default date */
Run Code Online (Sandbox Code Playgroud)
如果您startDateTime的确是可选的,请考虑使用Scala的选项而不是使用null.这会使你的函数看起来像这样:
def getVWAP(date: Date, maxEvents: Int): Double = {
var startDateTime: Option[Date] = None;
if (maxEvents > 0) {
startDateTime = Some(date);
}
0.0
}
Run Code Online (Sandbox Code Playgroud)
你可以阅读更多关于哲学Option与null 这里.过度概括,null是有关运行时检查,导致NullPointerException如果一些变量是空的,Option大约是编译时检查,导致编译器错误指示可能非价值必须被处理.使用Option说你宁愿在编译时知道.