在Java中,您可以使用构造函数创建Some
的实例,即new Some(value)
,但None
没有合作伙伴类。如何从Java传递None
到Scala函数?
答案 0 :(得分:55)
scala.None$.MODULE$
事情并不总是类似于检查,例如这不能编译:
scala.Option<String> x = scala.None$.MODULE$;
因为javac不知道Scala的声明站点方差,所以你得到:
J.java:3: incompatible types
found : scala.None$
required: scala.Option<java.lang.String>
scala.Option<String> x = scala.None$.MODULE$ ;
但这确实可以编译:
scala.Option<String> x = scala.Option.apply(null);
这是获得在更多情况下可用的无法的另一种方式。
答案 1 :(得分:22)
我认为这个丑陋的部分会起作用:scala.None$.MODULE$
不需要新的实例,因为一个None和另一个一样好......
答案 2 :(得分:11)
您可以使用以下命令从java访问singleton None实例:
scala.None$.MODULE$
答案 3 :(得分:2)
我发现这个通用函数是最强大的。你需要提供type参数,但是只显示一次,这很好。其他一些解决方案在各种情况下都不起作用,因为您的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();
}
}
答案 4 :(得分:1)
面对这个臭屁股,我通常的作案手法是:
Scala的:
object SomeScalaObject {
def it = this
}
爪哇:
doStuff(SomeScalaObject.it());