假设我有
val a: Option[String] = None
someJavaFunction(a)
然后在java文件中,我想做这样的事情:
public someJavaFunction(Option<String> o) {
o.orNull();
}
然而,orNull的签名是这样的:
orNull [A1 >: A](implicit ev : <:<[Null, A1]) : A1
所以从Java开始,我需要提供这种证据功能,这种功能通常由Scala(我不知道在哪里)制作。我怎样才能掌握证据价值?
这显然不明智。
有可能吗?
答案 0 :(得分:2)
<:<
类在scala.Predef
中定义,通常它是scala.Predef.conforms()
,它为您提供Scala中的实例。所以你可以做类似
public class Foo {
public static String foo(scala.Option<String> o) {
return o.orNull(
(scala.Predef.$less$colon$less< scala.runtime.Null$ , String >)
(Object)scala.Predef.conforms()
);
}
}
提供未经检查的操作警告,但有效。
你也可以创建一个scala.Predef.$less$colon$less
的实例来做正确的事情(只返回它的参数),然后在没有警告的情况下进行强制转换。
注意:您必须在Null$
或javac混淆后留空。