2010-01-04 9 views

risposta

19

penso che questo brutto po funzionerà: scala.None$.MODULE$

Non v'è alcuna necessità di una nuova istanza dal momento che uno Nessuno è buono come un altro ...

10

È possibile accedere al Singleton Nessuno esempio, da Java utilizzando :

scala.None$.MODULE$ 
49

La cosa scala.None$.MODULE$ non sempre TYPECHECK, per esempio, questo non può essere compilato:

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

perché javac non sa di varianza dichiarazione-sito di Scala, in modo da ottenere:

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

Ciò compilare, però:

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

in modo che un modo diverso per ottenere un Nessuno che è utilizzabile in più situazioni.

+8

Ho persino dovuto scrivere "scala.Option.apply ((String) null" per rendere il compilatore felice. – Eric

+1

Grazie! Questo ha funzionato per me, mentre scala.Non $ .MODULE $ ha prodotto errori di tipo. –

1

Di fronte a questa stinkfest, mio ​​solito modus operandi è:

Scala:

object SomeScalaObject { 
    def it = this 
} 

Java:

doStuff(SomeScalaObject.it()); 
2

ho trovato questo questa funzione generica per essere il più robusto . Devi fornire il parametro type, ma il cast appare solo una volta, il che è bello. Alcune delle altre soluzioni non funzioneranno in vari scenari, come potrebbe essere informato dal compilatore Java.

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(); 
    } 
} 
Problemi correlati