Consider the following Scala code:

请考虑以下Scala代码:

package scala_java
object MyScala {
  def setFunc(func: Int => String) {
    func(10)
  }
}

Now in Java, I would have liked to use MyScala as:

现在在Java中,我本来希望使用MyScala:

package scala_java;
public class MyJava {
    public static void main(String [] args) {
        MyScala.setFunc(myFunc);  // This line gives an error
    }
    public static String myFunc(int someInt) {
        return String.valueOf(someInt);
    }
}

However, the above does not work (as expected since Java does not allow functional programming). What is the easiest workaround to pass a function in Java? I would like a generic solution that works with functions having arbitrary number of parameters.

但是,上述方法不起作用(正如预期的那样,因为Java不允许进行函数式编程)。在Java中传递函数最简单的解决方法是什么?我想要一个适用于具有任意数量参数的函数的通用解决方案。

EDIT: Does Java 8 have any better syntax than the classic solutions discussed below?

编辑:Java 8是否有比下面讨论的经典解决方案更好的语法?

4 个解决方案

#1


26

You have to manually instantiate a Function1 in Java. Something like:

您必须在Java中手动实例化Function1。就像是:

final Function1<Integer, String> f = new Function1<Integer, String>() {
    public int $tag() {
        return Function1$class.$tag(this);
    }

    public <A> Function1<A, String> compose(Function1<A, Integer> f) {
        return Function1$class.compose(this, f);
    }

    public String apply(Integer someInt) {
        return myFunc(someInt);
    }
};
MyScala.setFunc(f);

This is taken from Daniel Spiewak’s “Interop Between Java and Scala” article.

这取自Daniel Spiewak的“Interop Between Java和Scala”一文。

更多相关文章

  1. java中多线程安全问题产生&解决方案——同步方法
  2. 关于Javascript中声明变量、函数的笔记
  3. 异步执行多个任务并在JavaScript函数中返回第一个成功的结果

随机推荐

  1. DRBD+Heartbeat+Mysql高可用读写分离架构
  2. 在sqlzoo上自学加入#10教程
  3. 如何确定使用Java和MySQL的插入或更新是
  4. linux6.4搭建mysql主从复制
  5. php数据库数据转换为js中的json对象
  6. mysql 怎么给一个表一次增加多个字段, mys
  7. mysql 数据库自增id 的总结
  8. 最近升级mysql5.7出现下面问题,ORDER BY c
  9. win server 2008 R2 已有apache 、mysql,
  10. mysql必知必会(一、数据库基础知识)