调用Scala函数,该函数从Java获取参数Option [Long]

时间:2013-05-07 22:53:44

标签: java scala

我有一个Scala函数,它接受一个类型为Option [Long]的参数。

我想从Java调用此函数,但如果我尝试

Long num = new Long(5);
scalaFunction(Option.apply(num));

我收到一个错误,它期待一个Option< java.lang.Object>并且不接受我的选项< java.lang.Long>。

如果我写的话,它将编译并运行:

scalaFunction((Object) num);

然而,这感觉很脏,可能不是正确的方法......所以......正确的方法是什么?

2 个答案:

答案 0 :(得分:2)

我认为简单

Option<scala.Long> a = Option.apply(scala.Long(5L));

将起作用:)

答案 1 :(得分:1)

我不确定,但我似乎记得之前遇到过这个问题,而且是由于无法将Scala中的方差注释明智地转换为Java。

回想一下,Option被定义为Option[+A]。如果我定义了一个函数foo(x : Option[Long]),那么该函数会将Option[A]带到A <: Long。但是,没有简单的方法来指示Option到Java的协变特性,所以我认为编译器只是将它表示为普通的Option<Object>