Kotlin var和val在扩展属性上有什么区别?

Kotlin var和val在扩展属性上有什么区别?,kotlin,Kotlin,我创建了扩展属性,我遇到了这个问题 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() =

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

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"

fun main(args:Array){
println(动物(“Mia”,1,1.0))
}
类动物(变量名称:String,变量年龄:Int,变量权重:Double)
var Animal.getXXX:String//compiler:Property必须初始化
get()=“$name,$age,$weight”
val Animal.getXXX:String//编译器运行正常
get()=“$name,$age,$weight”

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

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

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

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

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

var是可变的,我们可以重新分配或更改其值。但是我们不能更改val值。

var是可变的,我们可以重新分配或更改其值。但是我们不能更改val值。

扩展属性中的
var
val
之间的区别在于,在编写扩展属性时,如果使用
val
则只能使用get,因为它是不可变的常量变量,所以不能在val扩展属性中使用set()

比如说

val String.extensionProperty
    get() = "Value"
var String.extensionProperty
    get() = "Value"
    set(value) {
        println("variable has been updated with this data $value")
    }
如果您想使用
var
创建一个扩展属性,您希望该属性是可变的,这样您就可以在更新varaible时为它设置值并执行任何其他操作

比如说

val String.extensionProperty
    get() = "Value"
var String.extensionProperty
    get() = "Value"
    set(value) {
        println("variable has been updated with this data $value")
    }

扩展属性中的
var
val
之间的区别在于,在编写扩展属性时,如果使用
val
,则只能使用get,因为它是不可变的常量变量,所以不能为其设置值,也不能在val扩展属性中使用set()

比如说

val String.extensionProperty
    get() = "Value"
var String.extensionProperty
    get() = "Value"
    set(value) {
        println("variable has been updated with this data $value")
    }
如果您想使用
var
创建一个扩展属性,您希望该属性是可变的,这样您就可以在更新varaible时为它设置值并执行任何其他操作

比如说

val String.extensionProperty
    get() = "Value"
var String.extensionProperty
    get() = "Value"
    set(value) {
        println("variable has been updated with this data $value")
    }

这回答了你的问题吗?这回答了你的问题吗?