import scala.collection.JavaConverters._
val line: List[String] = null
val myTry = Try(line.asJava)
val result = myTry match {
case Success(_) => "Success"
case Failure(_) => "Failure"
}
println(result)
此代码段打印"成功"。如果我尝试访问myTry.get
,则会抛出NullPointerException
。
根据我的理解尝试,不应该尝试失败吗?
答案 0 :(得分:5)
从我的理解尝试,不应该myTry成为失败?
具体而言,asJava
上的List
以SeqWrapper
的形式围绕原始集合创建了一个包装器。它不会迭代原始集合:
case class SeqWrapper[A](underlying: Seq[A]) extends ju.AbstractList[A] with IterableWrapperTrait[A] {
def get(i: Int) = underlying(i)
}
如果您使用其他任何迭代集合或尝试访问集合的内容,例如toSeq
,您将看到失败:
import scala.collection.JavaConverters._
val line: List[String] = null
val myTry = Try(line.toSeq)
val result = myTry match {
case Success(_) => "Success"
case Failure(_) => "Failure"
}
println(result)