with parser example ejemplo java scala singleton scala-java-interop

parser - Cómo usar scala.None desde código Java



sax xml java example (5)

Posible duplicado:
Accediendo a scala.None desde Java

En Java puede crear una instancia de Some utilizando el constructor, es decir, new Some(value) , pero None no tiene clase asociada. ¿Cómo se pasa None a una función de Scala desde Java?


Creo que este feo poco funcionará: scala.None$.MODULE$

No hay necesidad de una nueva instancia ya que una None es tan buena como otra ...


Puede acceder a la instancia Noneton None desde java usando:

scala.None$.MODULE$


Enfrentado con este apestoso festival, mi modus operandi habitual es:

Scala:

object SomeScalaObject { def it = this }

Java:

doStuff(SomeScalaObject.it());


He encontrado que esta función genérica es la más sólida. Debe proporcionar el parámetro tipo, pero el molde solo aparece una vez, lo cual es bueno. Algunas de las otras soluciones no funcionarán en varios escenarios, ya que su compilador de Java puede informarle.

import scala.None$; import scala.Option; public class ScalaLang { public static <T> Option<T> none() { return (Option<T>) None$.MODULE$; } } public class ExampleUsage { static { //for example, with java.lang.Long ScalaLang.<Long>none(); } }


La scala.None$.MODULE$ no siempre comprueba, por ejemplo, esto no se compila:

scala.Option<String> x = scala.None$.MODULE$;

porque javac no sabe acerca de la varianza del sitio de declaración de Scala, por lo que obtienes:

J.java:3: incompatible types found : scala.None$ required: scala.Option<java.lang.String> scala.Option<String> x = scala.None$.MODULE$ ;

Esto sí compila:

scala.Option<String> x = scala.Option.apply(null);

entonces esa es una forma diferente de obtener una None que se puede usar en más situaciones.