kotlin 属性的get和set方法

发布时间 2023-10-19 00:17:36作者: LCAC

一、属性的继承

1、属性和函数类似也是可以继承

interface Parent {
    val addr: String // 这里是接口所以默认是open,如果是普通类中要被继承则需要显示写open
}

class Child: Parent {
    override val addr: String = "addr" // 这里使用override的方式
}

 

2、接口中的属性也可以有get和set,前提是不支持字段(支持字段需要在接口中存储状态)

interface User {
    var email: String
    var nickname: String
    get() = email.substringBefore('@') // 这里通过获取email的子字符串的方式
    set(value: String) {
        email = value // 这里没有涉及到field
        // field = value // error: property in an interface cannot have a backing field
    }
}

在接口中操作属性,不能涉及到field的操作

 

二、属性的get和set的作用

1、通过get和set方法增加额外的操作

class User(val name: String) {
    var addr: String? = null
    set(value: String?) {
        println("addr changed $field -> $value") // 这里增加打印的日志
        field = value
    }
    get() {
        if (field == null) {
            addr = "unspec" // 这里给个默认值
        }
        return field
    }
}

如上的例子在get和set中增加了额外的操作

 

2、修改属性访问的权限

有时候在类中,希望属性的get是public但是set是private

class User {
    var count = 0
    private set // 这里对set增加private的修饰,则只允许在类中赋值,但是get没有做操作则默认是public
}