Kotlin 数据类

2024 年 8 月 29 日 | 4 分钟阅读

数据类是一个简单的类,用于保存数据/状态并包含标准功能。 data 关键字用于将类声明为数据类。

声明数据类必须包含至少一个带有属性参数(val 或 var)的主构造函数。

数据类内部包含以下函数

  • equals(): Boolean
  • hashCode(): Int
  • toString(): String
  • 对应于属性的 component() 函数
  • copy()

由于数据类内部存在上述函数,因此数据类消除了样板代码。

Java 数据类和 Kotlin 数据类之间的比较

如果我们要使用数据类在 Java 中创建 User 条目,则需要大量的样板代码。

使用 User 类的对象调用上面 Java 数据类的构造函数,如下所示

输出

User{name='Ashu', id=101, email='[email protected]'}

上面的 Java 数据类代码在 Kotlin 数据代码中重写为单行,如下所示

使用 User 类的对象调用上面 Kotlin 数据类的构造函数,如下所示

输出

User(name=Ashu, id=101, [email protected])

数据类的要求

为了创建数据类,我们需要满足以下要求

  • 包含至少一个参数的主构造函数。
  • 主构造函数的参数标记为 *val* 或 *var*。
  • 数据类不能是抽象的、内部的、开放的或密封的。
  • 在 1.1 之前,数据类可能只实现接口。 之后,数据类可以扩展其他类。

Kotlin 数据类 toString() 方法

Kotlin 数据类只关注数据,而不是代码实现。

让我们看一个没有数据类的简单程序。 在这个类中,我们尝试使用 Product 类的对象打印 Product 类的引用。

在打印 Product 类的引用时,它会显示带有 Product 类名的 hashCode()。 它不打印数据。

输出

Product@266474c2

上面的程序使用 data class 重写,并打印 Product 类的引用并显示对象的数据。 发生这种情况是因为数据类内部包含 *toString()*,它显示对象的字符串表示形式。

输出

Product(name=laptop, price=25000)

Kotlin 数据类 equals() 和 hashCode()

equal() 方法用于检查其他对象是否“等于”当前对象。 在两个或多个 hashCode() 之间进行比较时,如果 hashCode() 相等,则 equals() 方法返回 true,否则返回 false。

例如,让我们看一个示例,其中一个普通类比较同一类 Product 的两个具有相同数据的引用。

在上面的程序中,引用 p1 和引用 p2 具有不同的引用。 由于 p1 和 p2 中的引用值不同,因此进行比较会显示 false。

输出

false
false

上面的程序使用 data class 重写,打印 Product 类的引用并显示对象的数据。

hashCode() 方法返回对象的哈希码。 如果两个对象相等,则 hashCode() 会产生相同的整数结果。

输出

true
true

Kotlin 数据类 copy() 方法

数据类提供了一个 copy() 方法,用于创建对象的副本(或克隆)。 使用 copy() 方法,可以更改对象的某些或所有属性。

例如

输出

p1 object contain data : Product(item=laptop, price=25000)
p2 copied object contains default data of p1: Product(item=laptop, price=25000)
p3 contain altered data of p1 : Product(item=laptop, price=20000)

数据类中的默认参数和命名参数

我们也可以在数据类的主构造函数中分配默认参数。 如果需要,这些默认值可以在以后在程序中更改。

例如

输出

Product(item=laptop, price=20000)

下一个主题Kotlin 密封类