Tag: jvm bytecode

Kotlin字节码 – 如何在IntelliJ IDEA中分析?

我是Kotlin的新手,我希望能够查看编译的字节码,以便了解更多关于它如何工作的信息。 我正在使用IntelliJ IDEA 15,但找不到查看字节码的好方法。 我错过了什么?

空或空lambda作为默认值

哪个解决方案比较好? 使用可空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作为默认值?

Kotlin内联扩展属性

我知道内联关键字的意思是避免调用开销调用一个函数。 但我不明白什么内联扩展属性工作? 假设我们有两个名为foo的扩展属性,另一个是内联的命名条 val Any.foo : Long get() = Date().time inline val Any.bar : Long get() = Date().time 执行它们中的任何一个,我们find期望的输出,即当前时间。 这个文件的字节码如下: public final class InlinedExtensionPropertyKt { public final static getFoo(Ljava/lang/Object;)J @Lorg/jetbrains/annotations/NotNull;() // invisible, parameter 0 L0 ALOAD 0 LDC “$receiver” INVOKESTATIC kotlin/jvm/internal/Intrinsics.checkParameterIsNotNull (Ljava/lang/Object;Ljava/lang/String;)V L1 LINENUMBER 9 L1 NEW java/util/Date DUP INVOKESPECIAL java/util/Date. ()V INVOKEVIRTUAL java/util/Date.getTime ()J […]

Kotlin字节码 – 如何在IntelliJ IDEA中分析?

我是Kotlin的新手,我希望能够查看编译的字节码,以便了解更多关于它如何工作的信息。 我正在使用IntelliJ IDEA 15,但找不到查看字节码的好方法。 我错过了什么?