kotlin - 幕后字段和幕后属性

kotlin 专栏收录该内容
14 篇文章 0 订阅

kotlin - 幕后字段和幕后属性

幕后字段

在kotlin中定义普通属性时,kotlin会为该属性生成一个field(字段)、getter和setter方法(只读属性没有setter方法)。kotlin为该属性生成的field(字段)被称为幕后字段。
注意:如果kotlin类的属性有幕后字段,那么就一定要给这个属性显示的指定初始值,要么在定义的时候指定,要么在构造器中指定初始值。如果没有field(字段)就不需要初始化

幕后字段生成的条件

  • 该属性使用了kotlin自动生成的getter、setter方法或者之一。简单的说就是只要我们重写读写属性的setter、getter或只读属性重写getter方法那么就不会生成幕后字段。
  • 在覆写getter和setter方法的时候显示的使用了field(字段)
    比如下面的代码:
class Person(name:String){
    var name=name
    set(newName){
        if(newName.length>6||newName.length<2){
            println("设置的名字不符合要求")
        }else{
            field=newName
        }
    }
}

幕后属性

幕后属性就是用private修饰的属性,kotlin不会为幕后属性生成getter和setter方法。
幕后属性必须要开发者提供幕后属性的getter、setter方法。
如下面代码:

class BackProperty(name: String) {
    private var _name: String = name
    var name: String
        get() = _name
        set(newName) {
            if (newName.length > 6 || newName.length < 2) {
                println("设置的名字不符合要求")
            } else {
                _name = newName
            }
        }
}

上面的代码首先我们定义了一个幕后属性_name,kotlin不会为幕后属性生成getter,setter方法,所以我们不能通过BackProperty对象._name的形式来访问。接下来又定义了一个name属性并重写了name属性的getter和setter方法,实际访问的还是幕后属性_name。
上面这种做方法类似于java的做法,在kotlin中一般不这样写因为太繁琐了。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

guojingbu

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值