代码之家  ›  专栏  ›  技术社区  ›  mallaudin

通过二级构造函数初始化Kotlin数据类的val属性

  •  2
  • mallaudin  · 技术社区  · 6 年前
    class Animal {
        val name: String
    
        constructor(name: String){
            this.name = name // initialized via constructor
        }
    }
    

    Kotlin 瓦尔 二级建造师 数据类

    data class User(val name: String, val postalCode: Int) {
        val email: String
    
        constructor( email: String): this("", 1){
            this.email = email // error: value can not be reassigned
        }
    
    }
    

    我不明白的是,email属性在哪里已经初始化了,因为我还没有声明任何初始化?

    1 回复  |  直到 6 年前
        1
  •  10
  •   zsmb13    6 年前

    如果类有一个主构造函数,那么 不得不 “在主构造函数中”初始化其所有属性-通过在声明时直接初始化它们:

    val email = "foo@bar.com"
    

    或在初始值设定项块中:

    val email: String
    
    init {
        email = "foo@bar.com"
    }
    

    val 无法重新分配。