在 Kotlin 中,您可以创建一个data类来保存数据。您希望将类标记为data的原因是让编译器知道您正在创建此类来保存数据,然后编译器会自动为您的数据类创建多个函数,这将有助于管理数据。在本指南中,我们将学习数据类和编译器自动生成的函数。
数据类学生:
data class Student(val stuName: String, val stuAge: Int)
在 Kotlin 中自动生成数据类的函数
现在我只是在这里提到函数的名称,我们将在示例的帮助下看到它们中的每一个。
equals()hashCode()toString()copy()componentN()
Kotlin 数据类要求
为了将类标记为数据,该类必须满足某些要求。要求如下:
- 数据类的主构造函数必须至少有一个参数。此外,参数标记为
val或var。 - 类不能标记为开放,抽象,密封或内部。
- 该类可以扩展(继承)其他类,它还可以实现其他接口。
Kotlin 数据类示例
在下面的示例中,我们有一个Student类,我们将其标记为数据类。由于我们已将此类声明为data,因此编译器已自动为此类生成了多个函数,如copy(),toString(),equals()等,我们将在接下来的几个示例中讨论这些函数。
data class Student(val name: String, val age: Int)fun main(args: Array<String>) {val stu = Student("Chaitanya", 31)val stu2 = Student("Ajeet", 30)println("Student Name is: ${stu.name}")println("Student Age is: ${stu.age}")println("Student Name is: ${stu2.name}")println("Student Age is: ${stu2.age}")}
输出:

数据类hashCode()和equals()方法
如果两个对象在 kotlin 中相同,那么它们具有相同的哈希码,我们可以使用hashCode()方法获得。
方法equals()返回true或false。如果两个对象的hashCode()相等,则equals()返回true,否则返回false。
data class Student(val name: String, val age: Int)fun main(args: Array<String>) {val stu = Student("Chaitanya", 31)val stu2 = Student("Chaitanya", 31)val stu3 = Student("Ajeet", 30)if (stu.equals(stu2) == true)println("stu is equal to stu2.")elseprintln("stu is not equal to stu2.")if (stu.equals(stu3) == true)println("stu is equal to stu3.")elseprintln("stu is not equal to stu3.")println("Hashcode of stu: ${stu.hashCode()}")println("Hashcode of stu2: ${stu2.hashCode()}")println("Hashcode of stu3: ${stu3.hashCode()}")}
输出:

数据类copy()方法
通过在数据类中使用copy()方法,我们可以复制其他对象的一些属性。让我们举个例子。这里我们有一个Student类的对象stu,其中包含学生"Steve"的名称,年龄和主题细节,我们创建了另一个名为"Lucy"的对象stu2并使用数据类的copy()方法,复制了stu对象的年龄和主题细节。
data class Student(val name: String, val age: Int, val sub: String)fun main(args: Array<String>) {val stu = Student("Steve", 26, "Math")// copying the age and subject from object stuval stu2 = stu.copy(name = "Lucy")println("stu: Name ${stu.name}, Age ${stu.age} & Subject ${stu.sub}")println("stu2: Name ${stu2.name}, Age ${stu2.age} & Subject ${stu2.sub}")}
输出:

数据类toString()方法
data类的toString()方法返回对象的String表示形式。
data class Student(val name: String, val age: Int, val sub: String)fun main(args: Array<String>) {val stu = Student("Steve", 26, "Math")println(stu.toString())}
输出:
Student(name=Steve, age=26, sub=Math)
数据类component()方法
数据类的componentN()方法将对象解构为多个变量。在下面的例子中,我们有一个Student类的对象stu,我们使用componentN()方法将对象解构为变量。component1()方法返回对象的第一个属性的值,component2()返回第二个属性的值,依此类推。
data class Student(val name: String, val age: Int, val sub: String)fun main(args: Array<String>) {val stu = Student("Steve", 26, "Math")val name = stu.component1()val age = stu.component2()val sub = stu.component3()println("Name is: $name")println("Age is: $age")println("SUbject is: $sub")}
输出:

