我正在尝试从java调用一个scala.Function2:
static public String foo(scala.Function2<String, scala.Int, String> bar) {
return "Hello " + bar.apply("World", 2);
}
但编译失败,并在调用bar.apply
的第二个参数上使用incompatible types: int cannot be converted to scala.Int
。
new scala.Int(2)
、scala.Int.unbox(2)
、scala.Int.box(2)
或创建像object Helper { def convert(i:Int):Int = i }
这样的scala转换函数也不起作用。
如何在java中创建一个可以传递给scala.Int
()的bar?
发布于 2018-06-14 09:35:59
通常的答案是,您希望将Scala函数“专门化”用于int参数。
适配器方法应该接受(String, Int)
并将其转发给函数,因为有恶意的字符串,所以该函数不是专门的签名。
通常,非专门化签名取消装箱并转发到专门化方法。
显示普通的传递int:
passint $ cat p.scala
package p
class C {
def f(): (Int => String) = (i => i.toString * i)
}
passint $ cat p/Main.java
package p;
public class Main {
public static void main(String... args) {
C c = new C();
System.out.println(c.f().apply(42));
}
}
passint $ scalac p.scala
passint $ javac -cp .:/Users/andrew/scala-2.12.6/lib/scala-library.jar p/Main.java
passint $ java -cp .:/Users/andrew/scala-2.12.6/lib/scala-library.jar p.Main
424242424242424242424242424242424242424242424242424242424242424242424242424242424242
passint $
https://stackoverflow.com/questions/50847988
复制相似问题