2017-11-10 447 views
2

我不明白通過訪問者處理字段和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) 
} 

回答

2
person.age++ 

由1

增加它的年齡修改現有 person實例
person.copy(age = person.age + 1) 

另一方面返回Person的新實例,它具有與person相同的屬性,但您指定的age除外。由於您的示例代碼是現在,您不會將這個新的Person實例分配給任何東西,您只是將它扔掉。

這個copy方法在你的類是不可變的時候非常有用(它的所有屬性都是val s) - 不是修改它,而是給你一個簡單的方法來創建一個與原始屬性基本相同的新實例。

+0

好點! ..我剛剛說過,第一個例子中的年齡是var,第二個是val – Abdellah

相關問題