gpt4 book ai didi

java - 这真的是从 Java 将 void 函数传递给 Scala 方法的方法吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:22:52 24 4
gpt4 key购买 nike

我最近一直在玩 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 的 void 或多或少是 Scala 的 Unit,所以我可以用下面的 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<String, BoxedUnit> f = new AbstractFunction1<String, BoxedUnit>() {
public BoxedUnit apply(String s) {
System.out.println("Why, hello there " + s);
return null;
}
};

mc.SayWhat(f);
}
}

这显然不是最漂亮的东西,但我很欣赏 AbstractFunction 的东西,真的,与我必须做的相比!但是真的没有 AbstractProcedure 之类的东西吗?另外,为什么我的“lambda”必须返回 BoxedUnit

最佳答案

您的函数实际上必须返回 BoxedUnit.UNIT,这是有问题的单位。

Unit 是一个 AnyVal,而不是一个 AnyRef,因此它不包含 null。

当函数返回有趣的值时,它会好得多。

关于java - 这真的是从 Java 将 void 函数传递给 Scala 方法的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23298046/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com