我的java代码看起来像(java8,支持lambda):
import scala.collection.mutable.HashMap;
...
public void test() {
HashMap<Integer, String> map = new HashMap<>();
map.put(1, "Hello");
// ERROR: parameter need Function0<B1>. given int, ()->"World".
map.getOrElse(1, () -> "World");
}
当我构建项目时,它告诉我parameter need Function0<B1>. given int, ()->"World".
但我的IDE(Idea)并没有提醒我这是一个错误,即使它提示我减少代码&#34; new Function0(){...}&#34;到&#34;() - &gt;世界&#34 ;.
那么如何在java代码(java8)中调用scala(HashMap)的getOrElse方法?
答案 0 :(得分:3)
我认为问题在于Java8功能接口不能直接转换为scala函数。
这将在Scala 2.12中解决(如here所述)。解决方案似乎是使用包装器为您进行转换。
更多详情here,自述文件中给出的示例是您正在寻找的内容:
import scala.concurrent.*;
import static scala.compat.java8.JFunction.*;
class Test {
private static Future<Integer> futureExample(Future<String> future, ExecutionContext ec) {
return future.map(func(s -> s.toUpperCase()), ec).map(func(s -> s.length()), ec);
}
}