您可以为此使用 JD-GUI。
http://java-decompiler.github.io/
与用于反编译的内置 IntelliJ 插件相比,这对我来说效果更好。你只需要给它你的 *.class 文件。
Kotlin 代码
//TryingOutLamdas.kt
class TryingOutLambdas {
public fun performSomething()
{
takingAOnclickListener { x -> print("Hello $x").toString() }
}
fun takingAOnclickListener(onClickListener: (Int) -> (String))
{
onClickListener.invoke(6)
}
}
使用 JD-GUI 为此转换的字节码。
public final class TryingOutLambdas {
public final void performSomething() {
takingAOnclickListener(TryingOutLambdas$performSomething$1
.INSTANCE);
}
public final void takingAOnclickListener(@NotNull Function1 onClickListener) {
Intrinsics.checkParameterIsNotNull(onClickListener, "onClickListener");
onClickListener.invoke(Integer.valueOf(6));
}
static final class TryingOutLambdas$performSomething$1 extends Lambda implements Function1<Integer, String> {
public static final TryingOutLambdas$performSomething$1 INSTANCE = new TryingOutLambdas$performSomething$1();
@NotNull
public final String invoke(int x) {
String str = "Hello " + x;
boolean bool = false;
System.out.print(str);
return Unit.INSTANCE.toString();
}
TryingOutLambdas$performSomething$1() {
super(1);
}
}
}
如果 lambda 表达式从它声明的函数访问任何变量,将创建一个实现该接口的新对象,而不是创建上面创建的 Singleton 实例。