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