J'ai besoin de convertir l'option Scala en Java en option. J'ai réussi à écrire ceci:
public <T> Optional<T> convertOption2Optional(Option<T> option) {
return option.isDefined() ? Optional.of(option.get()) : Optional.empty();
}
Mais je n'aime pas ça.
Y at-il un moyen simple de le faire, ou un convertisseur de scala intégré? Je cherche quelque chose comme:
Options.asJava(option);
Le moyen le plus rapide auquel je puisse penser en Java est le suivant:
Optional.ofNullable(option.getOrElse(null))
@ RégisJean-Gilles a en fait suggéré même si vous écrivez la conversion en Scala:
Optional.ofNullable(option.orNull)
À propos, vous devez savoir que Scala ne supporte pas Java 8 jusqu'à Scala 2.12, qui n'est pas encore officiellement sorti. En regardant les docs (qui peuvent changer jusqu’à la publication), une telle conversion n’existe pas dans JavaConversions
.
Je fais ça:
import Java.util.{Optional => JOption}
package object myscala {
implicit final class RichJOption[T](val optional: JOption[T]) {
def asScala: Option[T] = optional match {
case null => null
case _ => if (optional.isPresent) Option(optional.get()) else None
}
}
implicit final class RichOption[T](val option: Option[T]) {
def asJava: JOption[T] = option match {
case null => null
case _ => if (option.isDefined) JOption.of(option.get) else JOption.empty()
}
}
}
alors, vous pouvez l'utiliser comme ça, :)
import myscala._
object Main extends App {
val scalaOption = Java.util.Optional.ofNullable("test").asScala
println(scalaOption)
val javaOption = Option("test").asJava
println(javaOption)
}
Vous pouvez également utiliser certains des nombreux utilitaires disponibles sur le github, par exemple:
Pour un paramètre d'entrée donné opt: Option[T]
d'une classe, , Vous pouvez définir une méthode dans cette classe comme suit:
def toOptional(implicit ev: Null <:< T): Optional[T] = Optional.ofNullable(opt.orNull)
.