Kotlin 数据类,在 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.")
else
println("stu is not equal to stu2.")
if (stu.equals(stu3) == true)
println("stu is equal to stu3.")
else
println("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 stu
val 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")
}
输出: