2010-01-04 8 views

Respuesta

19

creo que este feo bits funcionará: scala.None$.MODULE$

No hay necesidad de una nueva instancia ya que uno Nada es tan bueno como otro ...

10

Puede acceder a la instancia singleton Ninguno de Java usando :

scala.None$.MODULE$ 
49

lo scala.None$.MODULE$ no siempre typecheck, por ejemplo, esto no se compila:

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

porque javac no sabe nada de la varianza declaración in situ de Scala, por lo que se obtiene:

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

Esto se compila, sin embargo:

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

por lo que es una manera diferente para obtener una Ninguno que es utilizable en más situaciones.

+8

Incluso tuve que escribir "scala.Option.apply ((String) null)" para hacer feliz al compilador. – Eric

+1

Gracias! Esto funcionó para mí, mientras que scala.None $ .MODULE $ produjo errores de tipo. –

1

Ante esta stinkfest, mi modus operandi habitual es:

Scala:

object SomeScalaObject { 
    def it = this 
} 

Java:

doStuff(SomeScalaObject.it()); 
2

he encontrado este esta función genérica para ser el más robusto . 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(); 
    } 
} 
Cuestiones relacionadas