破解Kotlin——属性重写

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


getter和setter

  在介绍底层原理之前,我们要先了解gettersetter,这两者其实是一种类型的东西,为了行文方便,下文只说明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属性编写gettersetter,为val属性编写getter。如果我们将上面的代码反编译为Java就能发现其中的原理:

public final class Simple {
   
   private int tmp;

   public final int getTmp() {
   
      return this.tmp;
   }

   public final void setTmp(int var1) 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空梦丿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值