Restituisce null perché è un'interfaccia superficiale sulla libreria Java. Penso che faccia schifo, e sono stato morso da esso.
Se si ottiene un valore che può essere nullo, è possibile scrivere Option(value)
su Scala 2.8 e diventerà None
o Some(value)
. Che non funziona con il pattern matching, ma si può scrivere il proprio estrattore per questo:
object Optional {
def unapply[T](a: T) = if (null == a) Some(None) else Some(Some(a))
}
Esempi:
scala> val a:String = null
a: String = null
scala> a match {
| case Optional(None) => println("Got none")
| case Optional(Some(value)) => println("Got "+value)
| }
Got none
scala> val a = "string"
a: java.lang.String = string
scala> a match {
| case Optional(None) => println("Got none")
| case Optional(Some(value)) => println("Got "+value)
| }
Got string
scala> val a = "5"
a: java.lang.String = 5
scala> a match {
| case Optional(None) => println("Got none")
| case Optional(Some(value)) => println("Got "+value.toInt)
| }
Got 5
fonte
2009-12-03 21:44:18
mi dimentico sempre di controllare quelle definizioni di oggetti :) L'esempio pattern matching è abbastanza interessante. –
Solo una nota: 'Option (valore)' funziona solo in Scala 2.8. Non 2.7.x –
Abbastanza vero. Una volta sono stato bravo a taggare 2.8 cose in quanto tali. –