首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中使用scala.Int参数调用scala.Function2

如何在Java中使用scala.Int参数调用scala.Function2
EN

Stack Overflow用户
提问于 2018-06-14 08:21:27
回答 1查看 196关注 0票数 0

我正在尝试从java调用一个scala.Function2:

代码语言:javascript
复制
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?

EN

回答 1

Stack Overflow用户

发布于 2018-06-14 09:35:59

通常的答案是,您希望将Scala函数“专门化”用于int参数。

适配器方法应该接受(String, Int)并将其转发给函数,因为有恶意的字符串,所以该函数不是专门的签名。

通常,非专门化签名取消装箱并转发到专门化方法。

显示普通的传递int:

代码语言:javascript
复制
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 $ 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50847988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档