你能从Java提供scala视图边界吗?

时间:2016-01-04 16:22:44

标签: java scala

假设我有

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(我不知道在哪里)制作。我怎样才能掌握证据价值?

这显然不明智。

有可能吗?

1 个答案:

答案 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混淆后留空。