为什么java反编译器不能用lambdas显示正确的代码?
我有一个简单的kotlin课程:为什么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
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我可以看到。如果有人知道的话,我想找一个更好的反编译器