Обтекание метода с нулевым возвратом в Java с помощью Option в Scala? - PullRequest
91 голосов
/ 14 января 2011

Предположим, у меня есть метод session.get(str: String): String, но вы не знаете, вернет ли он вам строку или ноль, потому что он происходит из Java.

Есть ли более простой способ обработать это в Scala вместо session.get("foo") == null?Может быть, какое-то волшебство применимо как ToOption(session.get("foo")), и тогда я смогу относиться к нему по-скальски как

ToOption(session.get("foo")) match {
    case Some(_) =>;
    case None =>;
}

Ответы [ 3 ]

162 голосов
/ 14 января 2011

Метод apply объекта-компаньона Option служит функцией преобразования из пустых ссылок:

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

scala> Option(3)   
res5: Option[Int] = Some(3)
16 голосов
/ 14 января 2011

Объект Option имеет метод apply, который делает именно это:

var myOptionalString = Option(session.get("foo"));
1 голос
/ 12 июня 2018

Обратите внимание, что при работе с объектами 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
...