从Java调用Scala方法 - 设置<object>或Set <long>?</long> </object>

时间:2014-01-31 15:01:04

标签: java scala

爪哇

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])

2 个答案:

答案 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]) = ???