我最近一直在玩
Scala /
Java互操作,特别是从
Java(7)调用Scala(2.10.4)代码.它比我想象的更令人愉快,但有些事情让我困惑.
例如,在scala.runtime中我有一个很好的AbstractFunction抽象类集合.但我没有看到任何没有返回值的方法.例如,假设我有以下Scala代码:
class MyClass(name: String) {
def SayWhat(say_fn: String => Unit) = say_fn(name)
}
我的理解是Java的空缺或多或少是Scala的单元,所以我可以通过以下Java匿名类模糊地传递类似lambda的东西:
import scala.Function1;
import scala.runtime.AbstractFunction1;
import scala.runtime.BoxedUnit;
public class MyProgram {
public static void main(String[] args) {
MyClass mc = new MyClass("Dan");
Function1 f = new AbstractFunction1() {
public BoxedUnit apply(String s) {
System.out.println("Why, hello there " + s);
return null;
}
};
mc.SayWhat(f);
}
}
这显然不是最漂亮的东西,但我很欣赏AbstractFunction的东西,真的,与我不得不做的相比!但是真的没有AbstractProcedure吗?另外,为什么我的“lambda”必须返回BoxedUnit?