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;
}
}
参数 注入
最终参数注入时,处理:
- Java Bean 中 public 字段,直接通过
.xxx =进行赋值即可; - Java Bean 中 私有字段,查找 set/getter 字段,来赋值;
- Kotlin 属性,也对应 set/getter 赋值;
- Kotlin bool 属性,匹配 is 开头后名 得到 get/setter 方法赋值。