目录
数据类
就是只存储数据,不包含操作行为的类。
创建数据类
使用关键字 data class
创建数据类。
data class Point(val x:Int, val y:Int)
fun testDataClazz(): Unit {
val p = Point(-1,5)
println(p.toString()) // 输出:Point(x=-1, y=5)
println(p.hashCode()) // 输出:-26
val p1 = p.copy()
println(p.equals(p1)) // 输出:true
println(p1.toString()) // 输出:Point(x=-1, y=5)
}
在IDEA中将kotlin代码反编译成等价的Java代码:
Tools / Kotlin / Show Kotlin Bytecode ,然后选择Decompile按钮,就可以查看对应的Java代码了
数据类的语法限制
- 主构造函数至少包含1个参数。(参数须标记为var或val)
- 数据类不能是 abstract、open、sealed、inner
- 数据类不可以继承其他类
- 数据类可以实现接口
- 数据类可以在
解构声明
中使用
fun testDeconstruct(): Unit {
val p = Point(-1,5)
val (x1,y1) = p //解构声明 (x1,y1)
println("$x1 , $y1") // 输出:-1 , 5
}
Pair
和 Triple
数据类
Kotlin标准库提供了 Pair
和 Triple
数据类,分别表示二元组和三元组对象。
fun testZU(): Unit {
val point = Pair<Int, Int>(-5, 9) // <....> 尖括号的内容可以省略
println("${point.first} , ${point.second}") // 输出:-5 , 9
println(point) // 输出:(-5, 9)
val person = Triple("Tyler", 19, "M") // 省略了尖括号的内容
println("${person.first}, ${person.second}, ${person.third}") // 输出:Tyler, 19, M
println(person) // 输出:(Tyler, 19, M)
val m = mapOf(1 to "x", 2 to "y", 3 to "z") // 使用Pair对象来初始化一个Map
println(m) // 输出:{1=x, 2=y, 3=z}
}