如何在Java中调用包含功能参数的scala方法?

时间:2019-04-10 07:37:46

标签: java scala slamdata

env:

java:1.8.0_201
scala:2.11.8
IDE: IntelliJ IDEA 2018.3.5 (Ultimate Edition) (Build #IU-183.5912.21)
Intellij Scala plugin:V2018.3.6

我有一个像这样的类方法

class ScalaA {
  def cal(op: () => String): String = {
    op.apply()
  }
}

我想调用方法cal,我的第一次尝试就是这样

public class JavaB {

  public static void main(String[] args) {
    new ScalaA().cal(() -> "Hello");

  }
}

但是发生了编译错误:

Error:(9, 22) java: incompatible types: scala.Function0 is not a functional interface
    multiple non-overriding abstract methods found in interface scala.Function0

然后我尝试这样调用方法cal

public static void main(String[] args) {
    new ScalaA().cal(new Function0<String>() {
      @Override
      public String apply() {
        return "aa";
      }
    });
  }

但是仍然存在编译错误

错误:(9,46)java:不是抽象的,并且没有覆盖scala.Function0中的抽象方法apply $ mcV $ sp()

apply $ mcV $ sp()方法似乎未实现,但在apply$mcV$sp()中看不到名为scala.Function0的方法

trait Function0[@specialized(Specializable.Primitives) +R] extends AnyRef { self =>
  /** Apply the body of this function to the arguments.
   *  @return   the result of function application.
   */
  def apply(): R

  override def toString() = "<function0>"
}

, 我该怎么办才能解决这个问题,请您给我一些建议,谢谢!

0 个答案:

没有答案