7.7 Kotlin 数据类

数据类是一个简单的类,用于保存数据/状态并包含标准功能(函数)。

数据类声明

  • data关键字用于将类声明为数据类。
  • 声明数据类必须至少包含一个带有属性参数(val或var)的主构造函数。
  • 类不能标记为开放,抽象,密封或内部。
  • 该类可以扩展(继承)其他类,它还可以实现其他接口。

示例:

data class Persion(var name: String, var age: String)

fun main(args: Array) {
    val persion = Persion("alfred", 28)
    println("${persion.name}: ${persion.age}")
}

结果:

alfred: 28

数据类内部函数

Kotlin 中自动生成如下函数,因此数据类消除了反复套用代码。

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

数据类hashCode()和equals()

  • 如果两个对象在 kotlin 中相同,那么它们具有相同的hashCode,我们可以使用hashCode()方法获得。
  • 如果两个对象的hashCode()相等,则equals()返回true,否则返回false。
data class Person(var name: String, var age: String)

fun main(args: Array) {
    val person = Person("alfred", 28)
    val user = person

    println("person_hashcode ${person.hashCode()} \nuser_hashcode ${user.hashCode()}")
    println("${person.equals(user)}")
}

结果:

persion_hashcode -916812346 
user_hashcode -916812346
true

数据类copy()

数据类提供了一个copy()方法,用于创建对象的副本(或冒号)。 使用copy()方法,可以更改对象的部分或全部属性。
举个例子:Person类的对象persion,姓名为alfred 年龄为28。我们创建了另一个名为user的对象person并使用数据类的copy()方法,复制了person对象的姓名。

data class Person(var name: String, var age: String)

fun main(args: Array) {
    val person = Person("alfred", 28)
    val user = person.copy(age = 11)
    println("${user.name} : ${user.age}")
}

结果:

alfred : 11

数据类toString()

data类的toString()方法返回对象的String表示形式。

data class Person(var name: String, var age: String)

fun main(args: Array) {
    val person = Person("alfred", 28)
    println(person.toString())
}

结果:

Person(name=alfred, age=28)

数据类component()

以上面示例为例,component1()方法返回对象的第一个属性的值,component2()返回第二个属性的值。不过一般不采用这种方式获取属性。

fun main(args: Array) {
    val person = Person("alfred", 28)
    println(person.component1())
    println(person.component2())
}

结果:

alfred
28

你可能感兴趣的:(7.7 Kotlin 数据类)