getter和setter
在介绍底层原理之前,我们要先了解getter和setter,这两者其实是一种类型的东西,为了行文方便,下文只说明getter。所谓的getter,其实就是对外界隐藏属性本身,然后通过一个名为get***的函数让外界对属性进行访问(修改),对于布尔类型,其getter一般采用is***的命名规则,setter和普通类型一样使用get***。
在Java中书写的getter长这样:
public class Simple {
private int tmp = 0;
//getter
public int getTmp() {
return tmp;
}
//setter
public void setTmp(int tmp) {
this.tmp = tmp;
}
}
那么对于KT,其getter是什么样子的呢?非常简单:
class Simple {
var tmp: Int = 0
}
为了照顾对于KT不熟悉的同学,我们再简单说明一下。KT中会自动为var属性编写getter和setter,为val属性编写getter。如果我们将上面的代码反编译为Java就能发现其中的原理:
public final class Simple {
private int tmp;
public final int getTmp() {
return this.tmp;
}
public final void setTmp(int var1)

本文探讨了Kotlin中属性重写的特点,解释了getter和setter的概念,通过代码示例展示了Kotlin如何在语言层面和底层实现属性重写。虽然JVM不支持属性重写,但Kotlin通过重写对应的方法达到效果。然而,这可能导致父类属性在初始化时的意外行为。解决方法是将父类属性设为lazy,确保仅在首次访问时初始化。理解这些原理有助于避免潜在问题。
最低0.47元/天 解锁文章
436

被折叠的 条评论
为什么被折叠?



