安卓面试

关于kotlin 中data class 不能重写getter/

2020-12-21  本文已影响0人  飞指

data class 的优缺点:

  1. 优点
    1. 自动生成get、set 方法,减少代码编写量、更轻量级别的实体类
  2. 缺点
    1. data class 不能是内部类
    2. data class 不能是抽象的
    3. data class 不能是open的,也是不能被其他类继承,因为其本身是final 类型

由于其优点,也造成了在开发过程中有时候需要对服务器返回的值进行处理,但是由于data class类自动帮我们生成了get、set 方法,导致我们无法重写get、set方法。

一般情况有两种有效的方案:

  1. 将data class 修改为普通的class
 @Test
    fun testUser() {
        var user = User()
        user.passWord = "123456"
        user.name = "张三"
        println(user.toString())
    }
class User {
    var name: String = ""
        get() {
            return "ccc"
        }
    var passWord: String = ""
        get() {
            return  "变化后ss"
        }


    override fun toString(): String {
        return "User{${name},${passWord}}"
    }
}
  1. 采用临时替换的方案进行处理,说白了也就是针对其值进行具体的操作处理。
    @Test
    fun testUser() {
        var user = User("张三","123456")
        println(user.toString()+user.getPassword())
    }
data class User(var name: String, val passWord: String) {
    fun getPassword(): String = this.passWord + "test"
}
上一篇 下一篇

猜你喜欢

热点阅读