当前位置: 首页 > 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;因为在实际使用中&#…...

[python入门㊻] - python装饰器和类的装饰器

目录 ❤ python装饰器介绍 ❤ 什么是装饰器 ❤ 装饰器的流程 ❤ 定义装饰器时通常会涉及以下3个函数 无参装饰器 有参装饰器 多重装饰器 ❤ 装饰器的用法(闭包) ❤ 装饰器语法糖 ❤ 时间计时器 ❤ 装饰器中wraps作用 不使用wraps装饰器 使用wraps装饰器解…...

企业级信息系统开发学习1.1 初识Spring——采用Spring配置文件管理Bean

文章目录一、Spring容器演示——采用Spring配置文件管理Bean&#xff08;一&#xff09;创建Maven项目&#xff08;二&#xff09;添加Spring依赖&#xff08;三&#xff09;创建杀龙任务类&#xff08;四&#xff09;创建勇敢骑士类&#xff08;五&#xff09;采用传统方式让勇…...

CSS盒子模型

盒子模型 CSS三大特性 继承性、层叠性、优先级 优先级比较 继承 < 通配符选择器 < 标签选择器 < 类选择器 < id选择器 < 行内样式 < !important 注意&#xff1a;!important不能提升继承的优先级&#xff0c;只要是继承优先级最低 复合选择器权重叠加计…...

Python基础学习笔记 —— 数据结构与算法

数据结构与算法1 数据结构基础1.1 数组1.2 链表1.3 队列1.4 栈1.5 二叉树2 排序算法2.1 冒泡排序2.2 快速排序2.3 &#xff08;简单&#xff09;选择排序2.4 堆排序2.5 &#xff08;直接&#xff09;插入排序3 查找3.1 二分查找1 数据结构基础 本章所需相关基础知识&#xff1a…...

笔记本连接wifi,浏览器访问页面,显示访问被拒绝

打开chrome、edge浏览器访问第1个第2个页面正常&#xff0c;后面再打开页面显示异常。 但手机连接正常&#xff0c;笔记本连接异常&#xff0c;起初完全没有怀疑是wifi问题 以为用了vpn软件问题&#xff0c;认为中了病毒。杀毒&#xff0c;并没有中毒。 1、关闭vpn代理&#…...

36个物联网专业毕业论文选题推荐

物联网技术在智能家居系统中的应用研究物联网在智慧城市建设中的作用物联网在工业4.0中的实现与发展 物联网与智能物流系统的结合物联网与医疗健康领域的融合研究物联网与环境监测系统的集成物联网与农业生产的结合研究物联网技术对汽车行业的影响与发展物联网在智能安防领域的…...

Pytorch复习笔记--torch.nn.functional.interpolate()和cv2.resize()的使用与比较

1--前言 博主在处理图片尺度问题时&#xff0c;习惯使用 cv2.resize() 函数&#xff1b;但当图片数据需用显卡加速运算时&#xff0c;数据需要在 GPU 和 CPU 之间不断迁移&#xff0c;导致程序运行效率降低&#xff1b; Pytorch 提供了一个类似于 cv2.resize() 的采样函数&…...

ASP.NET Core MVC 项目 AOP之ActionFilterAttribute

目录 一:说明 二:实现ActionFilterAttribute父类 一:说明 ActionFilterAttribute比前两者简单方便,易于扩展,不易产生代码冗余。 ActionFilterAttribute过滤器执行顺序: 1:执行控制器中的构造函数,实例化控制器 2:执行ActionFilterAttribute.OnActionExecutionA…...

浅析EasyCVR安防视频能力在智慧小区建设场景中的应用及意义

一、行业需求 城市的发展创造了大量工作机会&#xff0c;人口的聚集也推动了居民住宅建设率的增长。人民生活旨在安居乐业&#xff0c;能否住得“踏实”是很多劳动工作者最关心的问题。但目前随着住宅小区规模的不断扩大、人口逐渐密集&#xff0c;在保证居住环境舒适整洁的同…...

Python的深、浅拷贝到底是怎么回事?一篇解决问题

嗨害大家好鸭&#xff01;我是小熊猫~ 一、赋值 Python中&#xff0c; 对象的赋值都是进行对象引用&#xff08;内存地址&#xff09;传递, 赋值&#xff08;&#xff09;&#xff0c; 就是创建了对象的一个新的引用&#xff0c; 修改其中任意一个变量都会影响到另一个 will …...

jsp做网站用什么封装字符串/长沙网络营销学校

本文转自Roboters blog 对D-Bus Tutorial 进行了一些翻译加上自己的一些理解。 有很多种IPC或者网络通信系统&#xff0c;如&#xff1a;CORBA, DCE, DCOM, DCOP, XML-RPC, SOAP, MBUS, Internet Communications Engine (ICE)等等&#xff0c;可能会有数百种&#xff0c;dbus…...

macbook air做网站/2023年6月份疫情严重吗

PagerAdapter的方法getCount() 获取viewpager中有多少view instantiateItem() 1.将给定的view添加到viewGroup&#xff08;容器&#xff09;中&#xff0c;创建并显示出来 2.返回一个代表新增页面的object&#xff08;key&#xff09;,通常都是直接返回view本身就可以了&…...

手机网站开发哪个好/江苏seo排名

iOS 4开始引入的multitask&#xff0c;我们可以实现像ipod程序那样在后台播放音频了。如果音频操作是用苹果官方的AVFoundation.framework实现&#xff0c;像用AvAudioPlayer&#xff0c;AvPlayer播放的话&#xff0c;要实现完美的后台音频播放&#xff0c;依据app的功能需要&a…...

芜湖网站制作/百度关键词搜索量排行

AngularJS是一个javascript框架&#xff0c;通过AngularJS这个类库可以实现目前比较流行的单页面应用&#xff0c;AngularJS还具有双向数据绑定的特点&#xff0c;更加适应页面动态内容。所谓单页面应用就是在同一个页面动态加载不同的内容&#xff0c;而这里的“跳转”可以理解…...

微信做自己网站/品牌营销咨询公司

Windows下安装配置Redis数据库 Redis是有名的NoSql数据库&#xff0c;一般Linux都会默认支持。但在Windows环境中&#xff0c;可能需要手动安装设置才能有效使用。这里就简单介绍一下Windows下Redis服务的安装方法&#xff0c;希望能够帮到你。 1、要安装Redis&#xff0c;首…...

响应式网站制作流程图/搜索引擎关键词优化

一、类的扩展方法 1.静态方法 语法&#xff1a;staticmethod&#xff0c;静态方法不能访问公有属性&#xff0c;不能访问类。可在实例化后直接调用&#xff0c;并且在方法里可以通过self.调用实例变量或类变量。 1 class eat(object): 2 def __init__(self,name): 3 …...