Using Scala from Java: passing functions as parameters

前端 未结 4 2061
陌清茗
陌清茗 2020-12-01 07:12

Consider the following Scala code:

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

Now in Ja

4条回答
  •  执笔经年
    2020-12-01 07:46

    The easiest way for me is to defined a java interface like:

    public interface JFunction {
      public B compute( A a );
    }
    

    Then modify your scala code, overloading setFunc to accept also JFunction objects such as:

    object MyScala {
      // API for scala
      def setFunc(func: Int => String) {
        func(10)
      }
      // API for java
      def setFunc(jFunc: JFunction[Int,String]) {
        setFunc( (i:Int) => jFunc.compute(i) )
      }
    }
    

    You will naturally use the first definition from scala, but still be able to use the second one from java:

    public class MyJava {
      public static void main(String [] args) {
        MyScala.setFunc(myFunc);  // This line gives an error
      }
    
      public static final JFunction myFunc = 
        new JFunction() {
          public String compute( Integer a ) {
            return String.valueOf(a);
          }
        };
    
    }
    

提交回复
热议问题