3

我有一个 Scala 函数,它采用 Option[Long] 类型的单个参数。

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

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

我收到一个错误,它需要一个 Option<java.lang.Object> 并且不会接受我的 Option<java.lang.Long>。

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

scalaFunction((Object) num);

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

4

2 回答 2

2

I think a simple

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

will work :)

于 2013-05-07T23:52:27.267 回答
1

我不确定,但我似乎记得以前遇到过这个问题,这归结为无法明智地将方差注释从 Scala 转换为 Java。

回想一下,Option定义为Option[+A]。如果我定义了一个函数foo(x : Option[Long]),那么该函数将采用任何Option[A]where A <: Long。但是,没有简单的方法可以表明OptionJava 的协变性质,所以我认为编译器只是将它呈现为一个普通的Option<Object>.

于 2013-05-08T10:47:51.537 回答