小工具知识网

当前位置: 首页 > 行业知识 > Kotlin 数据类

行业知识

Kotlin 数据类

2026-11-11 22:15:43 来源:互联网转载

文章目录

  • 定义
  • 编译器自动重写、生成方法

    定义

    Kotlin 数据类可以用于存储数据(当然,不是说普通类不行)。数据类使用data class定义:

    data class Book(val name: String, val author: String)

    数据类必须有主构造方法,括号中只能定义由val或var修饰的成员变量,至少要有一个。

    数据类不能用这些修饰符修饰: abstract、open、sealed、inner。

    编译器自动重写、生成方法

    我们可以再定义一个普通类class,对比一下:

    data class Book(val name: String, val author: String)class User(val name: String, val password: String)

    对于声明为data class的类,会重写或生成以下方法:

    1. equals和hashCode。数据类的equals方法会对比每一个成员变量是否相对(我们平时使用==,其实就是去调用对象的equals方法),hashCode也会根据成员变量生成对应的值。若全相对,也会判定两个对象相对,hashCode也会获取到同样的值:

      fun main() {    val book1 = Book("十日终焉", "杀虫队队员")    val book2 = Book("十日终焉", "杀虫队队员")    val user1 = User("Zhou-Kt", "******")    val user2 = User("Zhou-Kt", "******")    println(book1 == book2)    println(user1 == user2)    println("${book1.hashCode()}  ${book2.hashCode()}")    print("${user1.hashCode()}  ${user2.hashCode()}")}
      truefalse-1278661368  -1278661368214126413  396873410
    2. toString。数据类的toString方法生成的字符串会比普通类更易于阅读(print会调用toString生成字符串,再输出):

      fun main() {    println(Book("十日终焉", "杀虫队队员"))    print(User("Zhou-Kt", "******"))}
      Book(name=十日终焉, author=杀虫队队员)User@6f539caf
    3. componentN(N为整数)。会生成一系列的方法,每一个方法都会按顺序获取到对应成员变量的值:

      fun main() {    val book = Book("十日终焉", "杀虫队队员")    val (name, author) = book    print("《${book.component1()}》作者:${book.component2()}")}
      《十日终焉》作者:杀虫队队员

      这一特性可以用于解构声明:

      fun main() {    val book = Book("十日终焉", "杀虫队队员")    val (name, author) = book    print("《$name》作者:$author")}
      《十日终焉》作者:杀虫队队员
    4. copy。该方法可以在原对象的基础上生成一个新对象,并且可以指定某一成员属性与原对象不同:

      fun main() {    val book = Book("十日终焉", "未知")    val newBook = book.copy(author = "杀虫队队员")    println(book)    print(newBook)}
      Book(name=十日终焉, author=未知)Book(name=十日终焉, author=杀虫队队员)

    Note:如果数据类中已经声明了这些方法,则不会再生成。数据类中不能声明与componentN或copy方法冲突的方法(方法名、参数和返回值类型都相同)。

上一篇:揭秘M4A格式,探索音频新领域

下一篇:【Python】进阶学习:pandas--query()用法详解