UnitKotlin
void中的Java 在大多数情况下与Java中的等效,但是仅在JVM规则允许的情况下才如此。
Kotlin中的功能类型由以下接口表示:
public interface Function1<in P1, out R> : Function<R> { public operator fun invoke(p1: P1): R}在声明时
(Int) -> Unit,从Java的角度来看,这等效于
Function<Integer,Unit>。这就是为什么您必须返回一个值。要变通解决此问题,在Java中有两个单独的接口
Consumer<T>,
Function<T,R>当您没有返回值/没有返回值时。
Kotlin的设计者决定放弃功能接口的重复,而是依靠编译器“魔术”。如果在Kotlin中声明一个lambda,则不必返回值,因为编译器会为您插入一个值。
为了使您的生活更轻松一点,你可以写一个封装了一个辅助方法
Consumer<T>中
Function1<T, Unit>:
public class FunctionalUtils { public static <T> Function1<T, Unit> fromConsumer(Consumer<T> callable) { return t -> { callable.accept(t); return Unit.INSTANCE; }; }}用法:
f(fromConsumer(integer -> doSomething()));
有趣的事实:
UnitKotlin编译器的特殊处理是您可以编写如下代码的原因:
fun foo() { return Unit}要么
fun bar() = println("Hello World")两种方法
void在生成的字节码中都有返回类型,但是编译器足够聪明,可以弄清楚这一点,并允许您使用返回语句/表达式。



