哪个解决方案更好?使用可空lambda还是将空lambda作为默认参数传递?Kotlin是否会优化空的lambda,或者创建一个什么也不做的新实例?
``` class Test1(val action: () -> Unit = {}) ```
不幸的是,我不理解生成的字节码。 让我们来分析一下。
``` val test11 = Test1() ```
反编译后给我们:
``` private static final Test1 test11 = new Test1((Function0)null, 1, (DefaultConstructorMarker)null); ```
最后,由于传递了lambda,类似这样:
``` var1 = (Function0)null.INSTANCE; ```
编辑: 隐藏的问题是:Kotlin如何处理空lambda作为默认值?
``` class Test1(val action: () -> Unit = {}) ```
不幸的是,我不理解生成的字节码。 让我们来分析一下。
``` val test11 = Test1() ```
反编译后给我们:
``` private static final Test1 test11 = new Test1((Function0)null, 1, (DefaultConstructorMarker)null); ```
最后,由于传递了lambda,类似这样:
``` var1 = (Function0)null.INSTANCE; ```
编辑: 隐藏的问题是:Kotlin如何处理空lambda作为默认值?
action?.invoke()
。 - Paweł Byszewskiclass Test1(val action: () -> Unit = {})
有什么疑虑? - ruX