只保存数据的类,用关键字data声明
数据类为了确保一致性和有意义,必须满足:
- 主构至少有一个参数且所有参数都需用var或val修饰
- 不能声明为抽象、open、密封或内部的
特点,会为主构的所有参数自动生成:
- equals() 和hashCode()
- toString()
- componentN() ,按主参顺序生成
- copy()
在类体中声明的属性不会自动生成上述方法,若类的两个对象主构值一样,则视为相等
data class User(val name: String, val sex: Boolean) :Person(){
var age: Int = 0
fun callName():String{
return name
}
}
----------------------------------------------------
open class Person {
final override fun toString(): String {
return "Person"
}
}
----------------------------------------------------
@Test
fun testD614() {
val user = User("cc",true)
val user1 = User("cc",true)
user.age = 12
user1.age = 24
val copy = user.copy(sex=false)
println("------${user.toString()}----------")
println("------${copy.name}-----${copy.age}---${copy.sex}--")
println("-user.age-${user.age}---${user.equals(user1)}---user1.age----${user1.age}----")
}
// 输出
------Person----------
------cc-----0---false--
-user.age-12---true---user1.age----24----
数据类可用于解构声明
标准库提供了Pair
和Triple数据类