今天参加字节跳动大数据岗位的面试。在开始说明实际面试问题之前,大家可以先思考一个问题:Scala中None跟null的区别是什么?它们之间的关系又是什么?
----------分界线:以下是实际面试问题讲解----------
如果有一个类A,里面有函数func。存在以下代码
case class A() {
def func: Unit = println("Func in A")
}
val a: A = A() // null
val b = Some(a)
如何用b正确的使用func函数?
以下两种写法在a = null时都可以避免NullPointerException的出现:
第一种写法。因为b是Some类型,所以直接用Some来匹配即可,x其实就是匹配的a。若a = null时,匹配出来x也等于null
b match {
case Some(x) =>
if (x == null) {
println("null")
} else {
x.func
}
}
第二种写法。可以先让特殊情况null匹配了之后,再匹配其余的情况
b match {
case Some(null) =>