我有一个Scala函数,它接受一个类型为Option [Long]的参数。
我想从Java调用此函数,但如果我尝试
Long num = new Long(5);
scalaFunction(Option.apply(num));
我收到一个错误,它期待一个Option< java.lang.Object>并且不接受我的选项< java.lang.Long>。
如果我写的话,它将编译并运行:
scalaFunction((Object) num);
然而,这感觉很脏,可能不是正确的方法......所以......正确的方法是什么?
答案 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>
。