首页 > 解决方案 > 扩展属性中的 var 和 val 有什么区别?

问题描述

我创建了扩展属性,我遇到了这个问题

fun main(args: Array<String>) {
    println(Animal("Mia",1,1.0))
}

class Animal(var name : String, var age : Int, var weight : Double)

var Animal.getXXX : String   // compiler : Property must be initialized
get() = "$name, $age, $weight"

val Animal.getXXX : String   // the compiler is running properly
get() = "$name, $age, $weight"

在上面的代码中。我为什么要使用val而不是var

标签: kotlin

解决方案


错误消息可能有点令人困惑。对于使用它们的扩展字段,var它们应该同时具有 getter 和 setter。使用的字段val只需要有一个getter(并且不能有一个setter)。以下代码有效:

var Animal.getFoo : String
get() = "$name, $age, $weight"
set(value) { /* do something */ }

推荐阅读