java - 为什么 kotlin lambda 反编译为 java 代码是 (Function0)null.INSTANCE

标签 java lambda kotlin

当我如下声明类中的属性时:

class xx{
    var b:()->Boolean={false}
}

然后反编译如下:

......

public xxx() {
    this.b = (Function0)null.INSTANCE;
}

......

(Function0)null.INSTANCE 代表什么? 我想会是:

this.b= new Function0() {
        public final Object invoke() {
                 return false;
         }
};

但它没有,为什么?

谢谢!

最佳答案

反编译器没有显示正确的结果:例如使用 JD-GUI 时,您会得到:

final class xx$b$1 extends Lambda implements kotlin.jvm.functions.Function0<Boolean> { 
  public final boolean invoke() { return false; }

  public static final 1 INSTANCE = new 1();
  xx$b$1()
  {
    super(0);
  }
}


public final class xx { 
  // ... getter and setter
  private Function0<Boolean> b = (Function0)xx.b.1.INSTANCE;
}

关于java - 为什么 kotlin lambda 反编译为 java 代码是 (Function0)null.INSTANCE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44877344/

相关文章:

java - 如何控制 JsonView 外部/打包对象属性的可见性?

python - 在单个 AWS Lambda 中使用两个 python 函数 boto3

c# - 过滤器列表 : get only unique elements in objects

kotlin - 如何在插件中使用 Gradle Kotlin DSL?

java - 为什么我的递归方法中的结果字符串没有更新?

java - Android:同时使用麦克风和耳机

C++ 将排列结果插入 vector

kotlin - 我们可以使用类作为方法吗

Android P visibilityawareimagebutton.setVisibility 只能从同一个库组中调用

java - 没有提供数组访问的get方法-向矩阵分配新值时出错