kotlin data clas 数据类

data class 介绍

kotlin 中 data class 是一种持有数据的特殊类

编译器自动从主构造函数中声明的所有属性导出以下成员:

    .equals()/.hashCode() 对
    .toString() 格式是 "User(name=John, age=42)"
    .componentN() 函数 按声明顺序对应于所有属性。
    .copy() 函数

为了确保生成的代码的一致性以及有意义的行为,数据类必须满足以下要求:

    主构造函数需要至少有一个参数。
    主构造函数的所有参数需要标记为 val 或 var。
    数据类不能是抽象、开放、密封或者内部的。

val 声明的参数类似java的final  ,data clas 里面不会有 set方法

var 声明的参数data clas 里面有 set方法

data clas 的使用

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

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.main_layout)
        val person = Person("张三丰", 122)
        Log.d("======person", "姓名=${person.name},年龄=${person.age}")
    }
}

componentN() 函数介绍

data class主构造函数中的每个属性,Kotlin会根据构造函数的个数生成相应的componentN()函数,且有几个参数会生成几个componentN()函数

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

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.main_layout)
//        val person = Person("张三丰", 122)
//        Log.d("======person", "姓名=${person.name},年龄=${person.age}")

        val person = Person("张三丰", 122)
        val (name, age) = person // 使用componentN()函数解构赋值
        Log.d("======person","$name is $age years old")
    }
}

copy 介绍

copy() 方法: copy()方法是data class提供的一个内置工具,用于创建现有实例的一个副本,并允许你修改部分属性值

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

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.main_layout)
//        val person = Person("张三丰", 122)
//        Log.d("======person", "姓名=${person.name},年龄=${person.age}")

//        val person = Person("张三丰", 122)
//        val (name, age) = person // 使用componentN()函数解构赋值
//        Log.d("======person","$name is $age years old")

        val person1 = Person("Alice", 30)
        // 创建person1的一个副本,并更改年龄
        val person2 = person1.copy(age = 31)
        // person2将拥有与person1相同的name属性,但age属性被更新为了31岁
        Log.d("======person", "姓名=${person2.name},年龄=${person2.age}")
    }
}

总体而言copy对于实现不可变设计模式或者需要快速创建基于已有对象的衍生版本时非常有用

相关推荐

  1. Kotlin 数据

    2024-01-27 08:54:01       56 阅读
  2. Kotlin的数据

    2024-01-27 08:54:01       63 阅读
  3. 数据挖掘 聚度量

    2024-01-27 08:54:01       47 阅读
  4. 数据挖掘 模糊聚

    2024-01-27 08:54:01       63 阅读
  5. kotlin data clas 数据

    2024-01-27 08:54:01       53 阅读
  6. Kotlin 中的数据

    2024-01-27 08:54:01       37 阅读

最近更新

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

    2024-01-27 08:54:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-27 08:54:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-27 08:54:01       82 阅读
  4. Python语言-面向对象

    2024-01-27 08:54:01       91 阅读

热门阅读

  1. Tomcat的安装及配置教程

    2024-01-27 08:54:01       66 阅读
  2. 网络端口与 IP 地址有什么区别?

    2024-01-27 08:54:01       51 阅读
  3. Taro框架如何抹平各端的差异

    2024-01-27 08:54:01       50 阅读
  4. 函数递归(C语言)

    2024-01-27 08:54:01       59 阅读
  5. Android Bitmap 图片裁剪

    2024-01-27 08:54:01       48 阅读
  6. Node+Express写分页接口

    2024-01-27 08:54:01       50 阅读
  7. 前端组件封装

    2024-01-27 08:54:01       47 阅读