Kotlin布尔属性和Java get/setter区别记录

168 阅读1分钟

Kotlin布尔属性和Java get/setter区别记录

在实现Android路由框架URouter时,支持 字段 参数注入(get/setter设置),问题记录。

区别

举例:有一 visible 字段。

  • Java 对应方法: setVisible 和 isVisible
  • Kotlin 最终生成: setVisible 和 getVisible
  • 而 Kotlin 声明 isVisible 属性,才会生成 setVisible 和 isVisible 方法

分析:
通过 Show Kotlin Bytecode -> Decompile 反编译 Kotlin 对应代码:

// Kotlin 
class Bean(var visible: Boolean)

// 对应 Java 代码
public final class Bean {
   private boolean visible;

   public final boolean getVisible() {
      return this.visible;
   }

   public final void setVisible(boolean var1) {
      this.visible = var1;
   }
}

当 isVisible 作为属性名时,才生成 Java Bean 形式的set/getter方法:

// Kotlin
class Bean(var isVisible: Boolean)

// 对应Java代码方法
public final class Bean {
   private boolean isVisible;

   public final boolean isVisible() {
      return this.isVisible;
   }

   public final void setVisible(boolean var1) {
      this.isVisible = var1;
   }
}

参数 注入

最终参数注入时,处理:

  1. Java Bean 中 public 字段,直接通过 .xxx = 进行赋值即可;
  2. Java Bean 中 私有字段,查找 set/getter 字段,来赋值;
  3. Kotlin 属性,也对应 set/getter 赋值;
  4. Kotlin bool 属性,匹配 is 开头后名 得到 get/setter 方法赋值。