在 Kotlin 中,我们有不可变属性的概念。
我曾经听说在函数式编程中,状态不应该改变。我一直在域模型的上下文中考虑这个问题。
假设我们有一个 Person
类(请不要介意这个非常愚蠢和不切实际的例子)。
class Person(val firstName: String, val lastName: String, val age: Int)
所有属性都是不可变的,这很好。
现在有人过来要求更换名字。所以我创建了一个可以做到这一点的函数。
fun replaceFirstName(person: Person, newFirstName: String): Person {
return Person(newFirstName, person.lastName, person.age)
}
现在这在我看来真的很难看。在这种情况下,只有 3 个属性,其中一个应该被替换。但是您可能可以想象这在更大的域类中会是什么样子。
简单的事情就是更换
val
与 var
,但随后不变性的整个意图就消失了。我正在寻找这样的东西(它确实抛出了一个错误,因为没有复制功能):
fun replaceName(person: Person, newFirstName: String): Person {
return person.copy { firstName = newFirstName }
}
在 Kotlin 中是否有一种简洁明了的方法来做到这一点?
最佳答案
Kotlin 有个概念 Data classes ,其中有 copy
你需要的功能。因此,如果您将类声明为:
data class Person(val firstName:String, val lastName:String, val age:Int)
您将能够使用此功能。它还会生成
equals()/hashCode/toString()
为你。
关于kotlin - 使用不可变属性在 Kotlin 中更改对象的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50923333/