类选项[T]的意义何在?
我无法理解Scala的课程要点。我的意思是,我看不到任何优势。Option[T]
None
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
None
display
如果是这样,那么为什么Scala通过引入新的值包装器()而不是遵循Java中使用的简单方法使事情复杂化?Option[T]
更新:
我已经按照@Mitch的建议编辑了我的代码。我仍然看不到任何特别的优势。我必须测试特殊情况或两种情况。:(Option[T]
null
None
如果我从@Michael的回复中正确理解,那么唯一的好处是它明确告诉程序员此方法可以返回None吗?这是这种设计选择背后的唯一原因吗?Option[T]