Kotlin 中,data class 和普通 class

data class

  1. 自动生成常用方法

    • data class 会自动生成 equals(), hashCode(), toString(), copy() 方法和 componentN() 函数。
    • 这些方法在数据类中非常有用,简化了代码。
  2. 主要用于存储数据

    • data class 主要用于存储数据,即它们通常是只包含属性和简单方法的类。
  3. 声明方式

    • data class 的声明方式为 data class ClassName(val property1: Type, val property2: Type, ...)
  4. 例子

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

普通 class

  1. 不自动生成常用方法

    • 普通类不会自动生成 equals(), hashCode(), toString(), copy() 方法和 componentN() 函数。
    • 如果需要这些方法,需要手动实现。
  2. 更通用

    • 普通类更通用,可以包含更复杂的逻辑,不只是用于存储数据。
  3. 声明方式

    • 普通类的声明方式为 class ClassName
  4. 例子

    class User(val name: String, val age: Int)
    

比较

特性 data class 普通 class
用途 主要用于存储数据 通用用途,适合包含复杂逻辑的类
自动生成方法 equals(), hashCode(), toString(), copy(), componentN() 不自动生成,需要手动实现
声明方式 data class User(val name: String, val age: Int) class User(val name: String, val age: Int)
代码简洁性 简化了数据类的实现,减少样板代码 需要更多的手动实现

示例

以下是一个完整的示例,展示了 data class 和普通 class 的区别:

// Data class example
data class User(val name: String, val age: Int)

fun main() {
    val user1 = User("Alice", 25)
    val user2 = User("Alice", 25)
    
    println(user1) // 自动生成的 toString() 方法
    println(user1 == user2) // 自动生成的 equals() 方法
    println(user1.copy(age = 26)) // 自动生成的 copy() 方法
}

// Regular class example
class User(val name: String, val age: Int) {
    override fun toString(): String {
        return "User(name='$name', age=$age)"
    }
    
    override fun equals(other: Any?): Boolean {
        if (this === other) return true
        if (other !is User) return false
        
        if (name != other.name) return false
        if (age != other.age) return false
        
        return true
    }
    
    override fun hashCode(): Int {
        var result = name.hashCode()
        result = 31 * result + age
        return result
    }
}

fun main() {
    val user1 = User("Alice", 25)
    val user2 = User("Alice", 25)
    
    println(user1) // 自定义的 toString() 方法
    println(user1 == user2) // 自定义的 equals() 方法
}

相关推荐

  1. Kotlin ,data class 普通 class

    2024-06-18 21:40:03       32 阅读
  2. 11:kotlin对象 -- 普通

    2024-06-18 21:40:03       63 阅读
  3. Kotlin Class

    2024-06-18 21:40:03       28 阅读
  4. 22:kotlin对象 -- 枚举类(Enum classes

    2024-06-18 21:40:03       55 阅读
  5. Kotlin 数据类(Data Class

    2024-06-18 21:40:03       29 阅读
  6. C++ 的 struct Class

    2024-06-18 21:40:03       39 阅读
  7. Python BaseModeldataclass用法区别

    2024-06-18 21:40:03       34 阅读
  8. Kotlin学习第1篇——data class

    2024-06-18 21:40:03       63 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-18 21:40:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-18 21:40:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-18 21:40:03       82 阅读
  4. Python语言-面向对象

    2024-06-18 21:40:03       91 阅读

热门阅读

  1. 嵌入式跨平台编译:vsftpd

    2024-06-18 21:40:03       28 阅读
  2. 测试testing06181

    2024-06-18 21:40:03       24 阅读
  3. Day41

    Day41

    2024-06-18 21:40:03      22 阅读
  4. 深入探讨:Spring与MyBatis中的连接池与缓存机制

    2024-06-18 21:40:03       21 阅读
  5. token无感刷新

    2024-06-18 21:40:03       26 阅读
  6. 【HarmonyOS NEXT 】鸿蒙detectBarcode (图像识码)

    2024-06-18 21:40:03       25 阅读
  7. Flink 计数器Accumulator

    2024-06-18 21:40:03       29 阅读
  8. MySQL触发器基本结构

    2024-06-18 21:40:03       28 阅读
  9. Roboflow对YOLO数据集、标注、训练、下载

    2024-06-18 21:40:03       27 阅读
  10. Bean 的生命周期

    2024-06-18 21:40:03       33 阅读