返回介绍

数据对象

发布于 2025-03-08 18:25:14 字数 1673 浏览 0 评论 0 收藏 0

我们经常创建一个只保存数据的类。在这样的类中一些函数只是机械的对它们持有的数据进行一些推导。在 kotlin 中这样的类可以标注为 data :

data class User(val name: String, val age: Int)

这叫做数据对象。编译器会根据主构造函数自动给所有属性添加如下方法:

equals() / hashCode  

toString 格式是 "User(name=john, age=42)"

[compontN()functions] ( http://kotlinlang.org/docs/reference/multi-declarations.html ) 对应按声明顺序出现的所有属性

copy()

如果在类中明确声明或从基类继承了这些方法,编译器就不会自动生成了/

注意如果构造函数参数中没有 val 或者 var ,就不会在这些函数中出现;

在 JVM 中如果构造函数是无参的,则所有的属性必须有默认的值 data class User(val name: String = "", val age: Int = 0)

复制

我们经常会对一些属性做修改但想要其他部分不变。这就是 copy() 函数的由来。在上面的 User 类中,实现起来应该是这样:

fun copy(name: String = this.name, age: Int = this.age) = User(name, age)

这样就允许改写了

val jack = User(name = "jack", age = 1)
val olderJack = jack.copy(age = 2)

数据类和多重声明

组件函数允许数据类在 多重声明 中使用:

val jane = User("jane", 35)
val (name, age) = jane
println("$name, $age years of age")

标准数据类

标准库提供了 PairTriple 。在大多数情形中,命名数据类是更好的设计选择,因为这样代码可读性更强而且提供了有意义的名字和属性。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文