当前位置: 首页 > news >正文

Kotlin data class 数据类用法

实验数据

{"code":1,"message":"成功","data":{"name":"周杰轮","gender":1}
}

kotlin数据类使用方便提供如下内部Api:

  1. equals()/hashCode()对

  2. toString()

  3. componentN()按声明顺序与属性相对应的函数。

  4. copy()功能

这里主要关注3,4,分别表示解构,和简单的对象浅拷贝实现 ,具体用法如下用例:

对于data类继承普通类之后,data类使用copy会与预期不符。

open class Person(val name: String? = "")
data class StuProJO(val gender: Int? = null) : Person(name = "")data class Normal(val name: String? = null, val age: Int = 18, var gender: Int? = 0)/*** 对于数据类Normal,copy方法执行符合预期。属于浅拷贝*/
fun main2(args: Array<String>) {//解构val (var1, var2, var3) = Normal("周杰轮", 18, 1)println("$var1 $var2 $var3")val normal2= Normal("周杰轮", 18, 2)//浅拷贝println(normal2.copy(name = "周杰轮2"))}//输出
//Normal(name=周杰轮, age=18, gender=1)
//Normal(name=周杰轮2, age=18, gender=1)/*** 继承方式结果与预期不符**/
fun main(args: Array<String>) {val temp = try {JsonParser.parseString(student) as JsonObject} catch (e: JsonParseException) {JsonObject()}val jsonObject = temp.takeIf { it.has("data") }val metaObject = jsonObject?.get("data")val metaData = metaObject.toString()var studentOB = GsonHelper.getClassFromJsonString(metaData, StuProJO::class.java)println(studentOB.toString())println(studentOB.name)printProjo(studentOB.copy(gender = 10000))}fun printProjo(person: Person) {print("打印 ${person} 继承的姓名:${person.name}")
}//输出
//StuProJO(gender=1)
//周杰轮
//打印 StuProJO(gender=10000) 继承的姓名:

上面copy()用例与预期不符原因根据官方提供说明

data class User(val name: String = “”, val age: Int = 0)
使用该copy()函数复制对象,允许您更改其某些属性,同时保持其余属性不变。上面类的这个函数的实现User如下:
fun copy(name: String = this.name, age: Int = this.age) = User(name, age)

对于复杂copy()用例,建议自定义函数来处理

stackoverflow:相关用例 Kotlin data class copy method not deep copying all members

工具类

public class GsonHelper {private static Gson sGson;private GsonHelper() {}public static synchronized Gson getGsonInstance() {if (sGson == null) {sGson = new Gson();}return sGson;}private static <T> T fromJson(String json, Type typeOfT) {try {return getGsonInstance().fromJson(json, typeOfT);} catch (JsonSyntaxException e) {e.printStackTrace();}return null;}public static <T extends Object> T getClassFromJsonString(String data, Class<T> clazz) {return fromJson(data, clazz);}}

kotlin office data class

相关文章:

Kotlin data class 数据类用法

实验数据 {"code":1,"message":"成功","data":{"name":"周杰轮","gender":1} }kotlin数据类使用方便提供如下内部Api&#xff1a; equals()/hashCode()对 toString() componentN()按声明顺序与属性相…...

随笔-老子不想牺牲了

18年来到这个项目组&#xff0c;当时只有8个人&#xff0c;包括经常不在的架构师和经理。当时的工位在西区1栋A座&#xff0c;办公桌很宽敞。随着项目的发展&#xff0c;入职的人越来越多&#xff0c;项目的工位也是几经搬迁。基本上每次搬迁时&#xff0c;我的工位都是挑剩下的…...

三种查找Windows10环境变量的方法

文章目录一.在设置中查看二. 在我的电脑中查看三. 在资源管理器里查看一.在设置中查看 在系统中搜索设置 打开设置&#xff0c;在设置功能里&#xff0c;点击第一项 系统 在系统功能里&#xff0c;左侧菜单找到关于 在关于的相关设置里可以看到高级系统设置 点击高级系…...

STM32单片机DS18B20测温程序源代码

OLED液晶屏电路接口DS18B20电路接口STM32单片机DS18B20测温程序源代码#include "sys.h"#define LED_RED PBout(12)#define LED_GREEN PBout(13)#define LED_YELLOW PBout(14)#define LED_BLUE PBout(15)#define DS18B20_IO_IN() {GPIOA->CRL&0XFFFFFFF0;GPIOA…...

java日志查看工具finder介绍

目录 一、finder介绍 二、单节点部署 1、服务器需要安装Tomcat&#xff0c;以2.82.16.35为例 2、进入Tomcat下目录webapps下&#xff0c;创建FIND目录&#xff0c;进入FIDN目录 3、下载findweb插件&#xff0c;解压缩 4、登录页面&#xff0c;配置 5、添加日志路径 三、…...

手写现代前端框架diff算法-前端面试进阶

前言 在前端工程上&#xff0c;日益复杂的今天&#xff0c;性能优化已经成为必不可少的环境。前端需要从每一个细节的问题去优化。那么如何更优&#xff0c;当然与他的如何怎么实现的有关。比如key为什么不能使用index呢&#xff1f;为什么不使用随机数呢&#xff1f;答案当然…...

【半监督医学图像分割 2022 MICCAI】CLLE 论文翻译

文章目录【半监督医学图像分割 2022 MICCAI】CLLE 论文翻译摘要1. 简介2. 方法2.1 半监督框架概述2.2 监督局部对比学习2.3 下采样和块划分3. 实验4. 结论【半监督医学图像分割 2022 MICCAI】CLLE 论文翻译 论文题目&#xff1a;Semi-supervised Contrastive Learning for Labe…...

vivo官网App模块化开发方案-ModularDevTool

作者&#xff1a;vivo 互联网客户端团队- Wang Zhenyu 本文主要讲述了Android客户端模块化开发的痛点及解决方案&#xff0c;详细讲解了方案的实现思路和具体实现方法。 说明&#xff1a;本工具基于vivo互联网客户端团队内部开源的编译管理工具开发。 一、背景 现在客户端的业…...

Python基础-数据类型之数字类型

变量中的变量值是用来存储事物状态的&#xff0c;事物的状态分成不同的种类&#xff08;例如&#xff1a;人的姓名、年龄&#xff0c;身高、职位、工资等&#xff09;&#xff0c;因此变量值有多种不同的数据类型。 age 18 # 用整型记录年龄 salary 3.1 # 用浮点型记录…...

基于Web的6个完美3D图形WebGL库

现代前端、游戏和Web开发正是WebGL可以转化为数字杰作的东西。使用GPU绘制在浏览器屏幕上生成的矢量元素&#xff0c;WebGL创建交互式Web图形&#xff0c;从而获得用户体验。视觉元素的质量和复杂性使该工具在HTML或CSS等其他方法中脱颖而出。WebGL基础WebGL不是一个图形套件。…...

界面组件DevExpress Reporting v22.2 - 增强的Web报表组件UI

DevExpress Reporting是.NET Framework下功能完善的报表平台&#xff0c;它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集&#xff0c;包括数据透视表、图表&#xff0c;因此您可以构建无与伦比、信息清晰的报表。DevExpress Reporting v22.2版本已正式发布&…...

初学vector

目录 string的收尾 拷贝构造的现代写法&#xff1a; 浅拷贝&#xff1a; 拷贝构造的现代写法&#xff1a; swap函数&#xff1a; 内置类型有拷贝构造和赋值重载吗&#xff1f; 完善拷贝构造的现代写法&#xff1a; 赋值重载的现代写法&#xff1a; 更精简的现代写法&…...

Windows10 安装wsl2、Ubuntu相关操作

Windows10 安装wsl2、Ubuntu相关操作 安装wsl2 查看本机windows版本&#xff1a; 键盘上按下winr,输入winver&#xff0c;查看系统版本。必须运行 windows 10 版本 2004 及更高版本&#xff08;内部版本 19041 及更高版本&#xff09;或 windows 11。满足版本要求后&#xf…...

SpringBoot简单使用MongoDB

MongoDB介绍 SpringBoot简单使用MongoDB 一、配置步骤 1、application.yml 2、pom 3、entity 4、mapper 二、案例代码使用 1、库 前期准备上一篇安装MongoDB地址http://t.csdn.cn/G4oYJ 跟关系型数据库概念对比 Mysql MongoDB Database&#xff08;数据库&#xff09; Datab…...

Oracle Data Guard 角色转换(Role Transitions)

查询视图V$DATABASE的DATABASE_ROLE列可以看到数据库当前的角色。 1&#xff0e;角色转换介绍 Oracle Data Guard让你可以使用SQL语句或者通过Oracle Data Guard broker界面来动态更改数据库的角色&#xff0c;Oracle Data Guard支持以下的角色转换&#xff1a; 1&#xff0…...

opencv的TrackBar控件

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a; lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…...

关于基线长度对双天线GNSS测姿精度的影响

文章目录一、GNSS测姿原理1. 载波相位双差求解基线向量2. GNSS姿态角表示二、基线长度对GNSS测姿精度的影响三、GNSS定向产品精度描述实例四、参考文献在GNSS定向模块或者板卡的指标参数中&#xff0c;我们一般会看到航向的测量精度和基线的长度相关。在实际使用&#xff0c;用…...

口交换机睿易 RG-NBS1826GC 24 口

接口形态不将就&#xff0c;标配光纤接口传输性能不将就&#xff0c;标配千兆上联口和大缓存设计端口数量不将就&#xff0c;8/16/24 三种选择楼宇对讲交换机不将就&#xff0c;保证开锁指令品质服务不将就&#xff0c;监控专用交换机接口形态不将就&#xff0c;标配光纤接口非…...

如何在Excel中向下拉列表中添加条件

在Excel中向下拉列表中添加条件 创建矩阵型数据集创建下拉列表创建第一个下拉列表创建第二个下拉列表你可以使用Microsoft Excel下拉列表来显示一个简单的列表,尽管有时需要更多的控制。假设你的人员分散在四个地区:北部、南部、东部和西部。你希望按地区与人员合作,而不是与…...

自定义bean 加载到spring IOC容器中

自定义bean加载到spring容器中的两种方式&#xff1a; 1.在类上添加注解Controller、RestController&#xff08;本质是Controller&#xff09;、Service、Repository、Component2.使用Configuration和Bean 这篇文章主要介绍第二种方式原理&#xff08;因为在实际使用中&#…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...