使用Scala中的Option包装Java中的null返回方法?

Jos*_*eal 92 java scala scala-option

假设我有一个方法,session.get(str: String): String但你不知道它是否会返回一个字符串或null,因为它来自Java.

有没有更简单的方法来处理Scala而不是session.get("foo") == null?也许有些魔法适用ToOption(session.get("foo")),然后我可以像Scala一样对待它

ToOption(session.get("foo")) match {
    case Some(_) =>;
    case None =>;
}
Run Code Online (Sandbox Code Playgroud)

Tom*_*ett 166

Option同伴对象的apply方法作为从可空引用转换函数:

scala> Option(null)
res4: Option[Null] = None

scala> Option(3)   
res5: Option[Int] = Some(3)
Run Code Online (Sandbox Code Playgroud)


RoT*_*oRa 16

Option对象有一个apply完全相同的方法:

var myOptionalString = Option(session.get("foo"));
Run Code Online (Sandbox Code Playgroud)


Dek*_*elM 5

请注意,在使用 Java 对象时,它不会按预期工作:

val nullValueInteger : java.lang.Integer = null
val option: Option[Int] = Option(nullValueInteger)
println(option)  // Doesn't work - zero value on conversion

val nullStringValue : String = null
val optionString: Option[String] = Option(nullStringValue)
println(optionString) // Works - None value
Run Code Online (Sandbox Code Playgroud)