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对于实现不可变设计模式或者需要快速创建基于已有对象的衍生版本时非常有用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/651386.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac配置L2TP连接公司内网

1. 打开系统设置 2. 打开网络 3. 点击网络页面其他服务右下角三个点,添加VPN配置中的L2TP 4. 配置VPN,服务器填写公司的服务器ip,共享密钥没有可以随便填写 5. 打开终端编辑文件 sudo vim /etc/ppp/opt…

机电制造ERP软件有哪些品牌?哪家的机电制造ERP系统比较好

机电制造过程比较复杂,涵盖零配件、采购、图纸设计、工艺派工、生产计划、物料需求计划、委外加工等诸多环节。而供应链涉及供应商的选择、材料采购价格波动分析、材料交货、品质检验等过程,其中某个环节出现问题都可能会影响产品交期和经营效益。 近些…

在Vue的模块开发中使用GPT的体验及总结

我这一周都在忙着实现一个页面,这个页面是通过vue基于element-ui来实现的。在这个过程中,我把页面拆分成多个组件,而组件的生成是通过Chat-GPT3来实现的。 这又是一次使用AI来协同开发的体验,觉得有必要总结一下: 遵循…

概念抽取:构建认知基础的关键步骤

目录 前言1 概念抽取任务定义1.1 概念知识图谱的关系定义1.2 实体与概念的紧密关联1.3 多样的概念关系 2 概念在认知中的重要角色2.1 语言理解的基础2.2 上下位关系的深化理解 3 概念抽取方法3.1 基于模板的抽取3.2 基于百科的抽取3.3 基于机器学习的方法 4 应用4.1 自然语言理…

Java基础面试题-5day

泛型 什么是泛型?有什么用? 泛型是jdk5引入的新特性,通过泛型可以提高代码的可读性和稳定性;当我们使用泛型时,传入的对象类型必须是指定的泛型类型,否则就会报错 泛型的使用方式有哪些? 一…

【论文笔记】GPT,GPT-2,GPT-3

参考:GPT,GPT-2,GPT-3【论文精读】 GPT Transformer的解码器,仅已知"过去",推导"未来" 论文地址:Improving Language Understanding by Generative Pre-Training 半监督学习&#xff1…

HPE ProLiant MicroServer Gen8更新固件

前几天因为没有shutdown OMV NAS便关了电源,导致其中一个硬盘损坏(用DG检查有9个坏区),从而整个硬盘数据都没法读取,于是想着装个windows server会不会更好点,至少对windows熟悉点,硬盘扫描恢复…

postman参数提取+加密

目录 常见提取方式 1. json格式提取 2. 正则表达式提取 3. cookie提取-提取响应返回的cookie值 4. 请求头提取值--提取响应头所需要的值 加密 1. MD5加密 2. base64位加密 响应示例 {"code": 0,"data": {"pageListData": [{"creat…

代码随想录算法刷题训练营day16

代码随想录算法刷题训练营day16:LeetCode(104)二叉树的最大深度 、LeetCode(559)n叉树的最大深度、LeetCode(111)二叉树的最小深度、LeetCode(222)完全二叉树的节点个数 LeetCode(104)二叉树的最大深度 题目 代码 /*** Definition for a binary tree node.* publ…

springboot事务管理

/*spring事务管理注解:Transactional位置:业务(service)层的方法上、类上、接口上作用:将当前方法交给spring进行事务管理,方法执行前,开启事务:成功执行完毕,提交事务:出现常,回滚事务需要在配置文件是加上开启spring事务yml文件…

Linux常见指令汇总

目录 pwd√ ls√ cd√ 对文件的理解√ which√ alias√ touch√ linux系统目录结构√ mkdir / tree √ rmdir / rm √ man√ nano√ cp√ mv√ cat√ echo√ linux设计理念和三种重定向总结√ more/less√ head/tail√ wc√ uniq√ date / cal√ find√…

PHP伪协议使用姿势

php支持的伪协议 1 file:// — 访问本地文件系统 2 http:// — 访问 HTTP(s) 网址 3 ftp:// — 访问 FTP(s) URLs 4 php:// — 访问各个输入/输出流(I/O streams) 5 zlib:// — 压缩流 6 data:// — 数据(RFC 2397) 7 glob:// —…

为什么在使用类成员函数指针时,需要 Myclass::myfunc ,而不是直接 Myclass::myfunc

我们知道一个函数的函数名就是这个函数的地址,那么我们使用类成员函数的地址时,为什么还要在前面加上取地址符号& 原因如下: 成员函数指针类型是一种特殊的指针类型,用于指向类的成员函数。在 C 中,对于非静态成员…

我的软件测试内卷之路

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 现在的大环境下,各行各业都开始内卷起来,测试也不例外,企业要…

STM32 HAL库 SysTick->VAL和SysTick->LOAD 实现us延时

本文使用HAL库和STM32CubeMX配置时钟,使用 SysTick->LOAD 和 SysTick->VAL 来实现延时us和延时ms M3内核中,SysTick计数器是24位递减计数器 计数范围2^24-1 到 0 ,然后重装载寄存器的值给SysTick计数器,重复下去 每来一个…

解释Go中常见的I/O模式

在这篇文章中,我想介绍一下常见的I/O(输入和输出)模式。我想在这篇文章中用浅显的语言澄清这些概念,这样人们就可以在他们的应用程序中使用优雅的Go I/O API。 让我们看看开发人员在日常生活中需要的常见用例。 写到标准输出 每…

npm install出错的各种情况

1.npm不再支持签名证书,npm install 走的是http协议,需要通过数字证书保证 解决方法: 解决方法:1、取消ssl验证:npm config set strict-ssl false 这个方法一般就可以解决了。 2、更换npm镜像源:npm confi…

分布式数据实现跨设备数据同步的N个秘密 | 分布式数据管理解析(二)

上期我们给大家带来分布式数据管理如何完成数据存储,数据同步,数据跨端访问,并保证整个过程中跨设备数据安全的解读。 这都得益于分布式数据管理平台抽象出的三大关键技术——分布式数据库,分布式文件系统和融合搜索。 那么这三…

IS-IS:10 ISIS路由渗透

ISIS的非骨干区域,无明细路由,容易导致次优路径问题。可以引入明细路由。 在IS-IS 网络中,所有的 level-2 和 level-1-2 路由器构成了一个连续的骨干区域。 level-1区域必须且只能与骨干区域相连,不同 level-1 区域之间不能直接…

ACDSee 2024旗舰版 下载安装汉化教程,ACDSee 最新版,附安装包和工具,全网最简单,轻松搞的安装,无套路

前言 ACDSee是一款数字资产管理、图片管理编辑工具软件,提供良好的操作界面,简单人性化的操作方式,优质的快速图形解码方式,支持丰富的RAW格式,强大的图形文件管理功能等。 准备工作 1、提前准备好 ACDSee 2024 安装…