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.