Преобразование в Option[Long]
на самом деле не просто преобразование в Option
, но и неявное приведение к Scala
* Long
из Java
* Long
.
val javaLong: java.lang.Long = null
// javaLong: Long = null
val long: java.lang.Long = javaLong
// long: Long = null
val long: Long = javaLong
// long: Long = 0
Сначала у нас есть неявное преобразование из Java
Long
в Scala
Long
, которое, очевидно, производит 0
из null
.
Только тогда мы имеемпреобразование в Option
.
Если мы указываем Java
Long
как тип нашего Option
, тогда мы получаем None
, а не Some(0)
:
val opt: Option[java.lang.Long] = Option(javaLong)
// opt: Option[Long] = None (here it's Java's Long)
И, наконец, мы можем разыграть Option[java.lang.Long]
, чтобы использовать Scala
s Long
:
val opt: Option[Long] = Option(javaLong).map(_.toLong)
// opt: Option[Long] = None (here it's Scala's Long)