我无法理解Option[T]
Scala的课程重点。我的意思是,我不能看到任何advanagesNone
了null
。
例如,考虑以下代码:
object Main{
class Person(name: String, var age: int){
def display = println(name+" "+age)
}
def getPerson1: Person = {
// returns a Person instance or null
}
def getPerson2: Option[Person] = {
// returns either Some[Person] or None
}
def main(argv: Array[String]): Unit = {
val p = getPerson1
if (p!=null) p.display
getPerson2 match{
case Some(person) => person.display
case None => /* Do nothing */
}
}
}
现在假设该方法getPerson1
返回null
,然后display
在的第一行上进行的调用main
必然会失败NPE
。同样,如果getPerson2
return None
,则display
调用将再次失败,并显示类似错误。
如果是这样,那么Scala为什么通过引入新的值包装器(Option[T]
)而不是遵循Java中使用的简单方法来使事情复杂化?
更新:
我已经按照@Mitch的建议编辑了代码。我仍然看不到的任何特殊优势Option[T]
。我必须测试例外情况null
或None
两种情况。:(
如果我从@Michael的答复中正确理解了Option[T]
,那么它的唯一优点是它明确告诉程序员该方法可以返回None?这是此设计选择背后的唯一原因吗?