通过"访问者"处理字段之间的区别是什么?和"复制"

时间:2017-11-10 20:19:48

标签: copy kotlin accessor

我不了解在Kotlin中通过访问者和复制方法处理字段之间的区别。就像这样:

访问者示例:

class Person(val name: String, 
             var age: Int)

fun happyBirthday(person: Person) {
    person.age++
}

复制方法示例:

data class Person(val name: String, 
             var age: Int)

fun happyBirthday(person: Person) {
    person.copy(age = person.age + 1)
}

1 个答案:

答案 0 :(得分:2)

person.age++

通过将其年龄增加1来修改现有的person实例。

person.copy(age = person.age + 1)
另一方面,

会返回与Person具有相同属性的新person实例,但您指定的age除外。由于您的示例代码现在是正确的,因此您并未将此新Person实例分配给任何内容,而是将其丢弃。

当你的类是不可变的(它的所有属性都是copy)时,这个val方法很有用 - 而不是修改它,它为你提供了一种简单的方法来创建一个主要是与原始属性相同的属性。