爪哇
Set<Long> set = new HashSet<Long>();
set.add(100);
long x = 2;
foo(x, set);
Scala的
def foo(a: Long, b: java.util.Set[Long])
错误:
could not parse error message:
required: long,Set<Object>
found: long,Set<Long>
reason: actual argument Set<Long> cannot be converted
to Set<Object> by method invocation conversion
然后,我修改了我的Java代码以解决编译时错误。
Set<Object> set = new HashSet<Object>();
然而,编译时错误的解决是以类型安全为代价的。如何正确解决上述错误?
修改
在@som-snytt解决了我的问题here之后,我遇到了这个问题。我不认为这是同一个问题,因为在我的链接问题中,在Scala中使用foo(Long, java.util.Set[Long])
在调用时(来自Java)ScalaObject.foo(long, Set[Long])
答案 0 :(得分:4)
类型错误。 Java代码中set
的类型为java.util.Set[java.lang.Long]
,而Scala中的类型为java.util.Set[scala.Long]
。 scala.Long
类型在Java中被视为原始long
,未被删除,在被删除时被视为java.lang.Object
(当您发现时)。
因此要么将Scala的类型更改为Java的类型以匹配。遗憾的是scala.Long
删除了java.lang.Object
,但是必要。
答案 1 :(得分:0)
在这种情况下,您可能想要导入JavaConverters
。
import scala.collection.JavaConverters._
def foo(a: Long, b: java.util.Set[Long]) = ???