java - 从 Java 调用 Scala 方法 - Set<Object> 还是 Set<Long>?

标签 java scala

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/

相关文章:

java - 在 JDialog 中使用 JavaFX JFXPanel 时无法看到视频

java - 与 0xff 的按位与运算很重要吗?

java - 如何在 Java 中安全地停止和恢复线程?

java - 在 PHP 中运行 java ".class"

scala - 通过 joda DateTime 范围 scala/casbah 查找 mongodb 条目

scala - 使用 Spark Scala 将数据帧转换为 HashMap

java - 从用户获取 http 请求并使用 REST API 将该变量值存储到任何数据结构中

案例类中的 Scala 选项类型

scala - 如何将 Akka 库添加到 jupyter-scala 以便我可以在笔记本中使用它?

scala - 何时使用 scala 三重插入符 (^^^) 与双重插入符 (^^) 和 into 方法 (>>)