Java
Set<Long> set = new HashSet<Long>();
set.add(100);
long x = 2;
foo(x, set);
斯卡拉
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])
最佳答案
类型错误。 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
,但这是必要的。
关于java - 从 Java 调用 Scala 方法 - Set<Object> 还是 Set<Long>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21483121/