Kotlin 学习——数据类

    在 Kotlin 中,有一个 data 关键字,来标记类,这种类一般只用来保存数据,但是数据类必须满足类以下条件:

    1. 主构造函数至少有一个参数

    2. 主构造函数的参数必须使用 var 或者 val 标记

    3. 数据类不能使抽象、开放、密封或者内部的

    4. (1.1以前)数据类只能实现接口

data class Demo1(val name:String,val age:Int)
class Demo2(val name:String,val age:Int)

fun main(args: Array<String>) {
    val demo1 = Demo1("宋琪飞",20);
    println(demo1)
    val demo2 = Demo2("宋琪飞",20);
    println(demo2)
}

    结果:


    可以看到,data 类和非 data 类的一点不一样,其实,对于 data 类,编译器会自动从主构造函数的所有属性中导入以下成员:

    1. equals() / hashCode() 对

    2. toString() 格式 "Demo1(name=宋琪飞,age=20)"

    3. copy 函数

    copy 函数是为了我们复制一个对象仅仅只改变它的一些属性,其他部分不变时使用的,如下:

data class Demo(val name:String,val age:Int)

fun main(args: Array<String>) {
    val demo = Demo("宋琪飞",20)
    println(demo)
    val demo1 = demo.copy(name = "陈金桁")
    println(demo1)
    val demo2 = demo.copy(age = 21)
    println(demo2)
    val demo3 = demo.copy(name = "陈金桁",age = 21)
    println(demo3)

}

    结果:


    注意:如果你的 data 类对于上述函数有具体的实现,或者其父类对这些函数有 final 的实现,那么 data 类就会直接使用现有函数,而不会自动生成。data 类当然也可以在类体中声明属性,只是编译器在自动生成函数时不会使用类中声明的元素。

  • 解构声明:我们可以对数据类进行解构,从而得到我们想要的属性:
data class Demo(val name:String,val age:Int)

fun main(args: Array<String>) {
    val demo = Demo("宋琪飞",20)
    val (name,age) = demo;
    println("姓名是$name")
    println("年龄是$age")
}

    结果:


猜你喜欢

转载自blog.csdn.net/young_time/article/details/80554732