美文网首页
Java & Groovy & Scala & Kotlin -

Java & Groovy & Scala & Kotlin -

作者: bookislife | 来源:发表于2017-08-06 11:03 被阅读0次

    Overview

    • Data 类是使用关键字 data 声明的类
    • Data 类默认基于构造方法实现了 toString(), componentN(), copy(), equals()hashCode() 方法,不在构造方法中定义的属性不会产生在 toString() 结果中。
    • Data 类可以直接使用 == 进行比较,同样不在构造方法中定义的属性不会用在比较上
    • Data 类只表示数据,不能拥有行为,所以通常来说我们没有必要为 Data 类构建类体

    定义 Data 类

    大部分情况下没有必要构建类体,所以省略大括号

    data class Customer(var name: String, var email: String, var friends: ArrayList<String>)
    

    使用 Data 类

    创建对象

    val peter = Customer("Peter", "peter@example.com", arrayListOf("Jane", "Tom"))
    

    复制对象

    Data class 默认实现了 copy() 方法,可以进行属性的复制,该复制仅为浅复制

    val tom = peter.copy()
    val jane = peter.copy(name = "")
    peter.friends.add("Tina")
    
    println(peter)  //  Customer(name=Peter, email=peter@example.com, friends=[Jane, Tom, Tina])
    println(tom)    //  Customer(name=Peter, email=peter@example.com, friends=[Jane, Tom, Tina])
    println(jane)   //  Customer(name=, email=peter@example.com, friends=[Jane, Tom, Tina])
    

    以上例子我们可以看到修改了 peterfriends 列表后 janetomfriends 列表也改变了,证明复制的仅是引用,不是值本身。

    ComponentN

    用于从对象中抽取对应的属性值

    data class Customer(var name: String, var email: String, var friends: ArrayList<String>)
    val peter = Customer("Peter", "peter@example.com", arrayListOf("Jane", "Tom"))
    
    // 抽取属性
    val (name, email) = peter
    println("name=$name,email=$email")
    

    文章源码见 https://github.com/SidneyXu/JGSK 仓库的 kotlin/_18_data_class 小节

    相关文章

      网友评论

          本文标题:Java & Groovy & Scala & Kotlin -

          本文链接:https://www.haomeiwen.com/subject/pfsglxtx.html