为什么java反编译器不能用lambdas显示正确的代码?

为什么java反编译器不能用lambdas显示正确的代码?,java,kotlin,Java,Kotlin,我有一个简单的kotlin课程: class MyClass { private val x: Int = 10 val m: (Int) -> Int = { a: Int -> a*a + a } } 我使用了IntelliJ反编译器,这是java代码: public final class MyClass { private final int x = 10; @NotNull private final Fu

我有一个简单的kotlin课程:

class MyClass {

    private val x: Int = 10
    val m: (Int) -> Int = { a: Int ->
        a*a + a
    }
}
我使用了IntelliJ反编译器,这是java代码:

public final class MyClass {
    private final int x = 10;
    @NotNull
    private final Function1 m;

    @NotNull
    public final Function1 getM() {
        return this.m;
    }

    public MyClass() {
        this.m = (Function1)null.INSTANCE;
    }
}
正如您所看到的,没有迹象表明lambda参数
m
中放置了什么,它在java代码中是
a*a+a
,并且它总是为
m
返回
null
值。但是,该代码存在字节码:

public final invoke(I)I
    // annotable parameter count: 1 (visible)
    // annotable parameter count: 1 (invisible)
   L0
    LINENUMBER 7 L0
    ILOAD 1
    ILOAD 1
    IMUL
    ILOAD 1
    IADD
   L1
    IRETURN
   L2

我想这是反编译器的问题,对吗?如果是这样的话,我应该使用什么反编译器?

反编译不是一个完美的过程。我不知道
intellij
在使用什么,但是
javap
在这种情况下说了什么?@marqueisoflorne我可以看到。如果有人知道的话,我想找一个更好的反编译器