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

咱们今天来唠唠机器人轨迹规划那点事儿。不少小伙伴在玩机械臂的时候总会遇到关节空间和笛卡尔空间轨迹规划的抉择困难症,这俩货到底有什么区别?直接上硬核代码

matlab笛卡尔空间和关节空间轨迹规划 关节空间机器臂多项式轨迹规划定做&#xff0c;353和333多项式轨迹规划和优化关节空间规划有个大杀器——多项式插值。比如要让机械臂从A点平滑运动到B点&#xff0c;咱们可以玩三次多项式&#xff08;3-3-3&#xff09;或者五次多项式&…...

别再死记公式了!用Python+Matplotlib亲手仿真LC并联谐振,直观理解选频原理

用PythonMatplotlib动态仿真LC并联谐振&#xff1a;从代码到物理直觉的沉浸式探索 当教科书上的LC并联谐振公式变成屏幕上跳动的曲线&#xff0c;当抽象的Q值概念转化为滑块调节时的实时波形变化&#xff0c;电子工程的学习便从枯燥的符号演算升维为一场充满探索乐趣的科学实验…...

Jable视频下载终极指南:3步免费保存你喜欢的视频内容

Jable视频下载终极指南&#xff1a;3步免费保存你喜欢的视频内容 【免费下载链接】jable-download 方便下载jable的小工具 项目地址: https://gitcode.com/gh_mirrors/ja/jable-download jable-download是一款专为Jable.tv视频平台设计的免费下载工具&#xff0c;通过Ch…...

LFM2.5-1.2B-Thinking-GGUF应用场景:智能硬件说明书问答机器人落地实践

LFM2.5-1.2B-Thinking-GGUF应用场景&#xff1a;智能硬件说明书问答机器人落地实践 1. 项目背景与需求 在智能硬件领域&#xff0c;产品说明书往往存在以下痛点&#xff1a; 内容专业术语多&#xff0c;普通用户难以理解纸质说明书查找信息效率低不同型号产品差异导致用户混…...

uni-app小程序开发必备:纯TypeScript实现4种UUID生成方案(无npm依赖)

uni-app小程序开发实战&#xff1a;零依赖TypeScript实现4种UUID生成方案 在uni-app跨平台开发中&#xff0c;小程序环境对npm库的支持限制常常让开发者头疼。特别是在需要生成唯一标识符的场景下&#xff0c;传统依赖uuid库的方案往往无法直接使用。本文将带你从底层原理出发&…...

LazyLLM架构设计揭秘:低代码如何支撑复杂多Agent系统

LazyLLM架构设计揭秘&#xff1a;低代码如何支撑复杂多Agent系统 【免费下载链接】LazyLLM 项目地址: https://gitcode.com/gh_mirrors/la/LazyLLM 在当今AI应用开发领域&#xff0c;构建复杂的多Agent系统往往需要大量的工程投入和专业知识。然而&#xff0c;LazyLLM框…...

注意力机制融合新范式:从GCNet与DANet看全局建模的演进与实战

1. 视觉注意力机制的进化之路 记得我第一次接触视觉注意力机制是在2016年&#xff0c;那时ResNet刚掀起深度学习的新浪潮。当时最让我困惑的是&#xff1a;为什么神经网络需要"注意力"&#xff1f;后来在ImageNet数据集上做实验时才明白&#xff0c;传统CNN就像近视眼…...

遇到‘Got minus one from a read call‘别慌!Oracle 12c连接数优化全攻略

深度解析Oracle 12c连接数优化&#xff1a;从"Got minus one from a read call"到高可用架构 当Java应用突然抛出java.sql.SQLRecoverableException: IO Error: Got minus one from a read call异常时&#xff0c;这往往是数据库连接资源耗尽的信号。本文将带您深入O…...

PromptTemplate和ChatPromptTemplate的区别是什么呢?

我用最简单、最直白、一看就懂的方式给你讲清楚&#xff1a; PromptTemplate 和 ChatPromptTemplate 的真正区别 一句话总结 PromptTemplate 生成一段普通字符串 给补全模型/简单模型用ChatPromptTemplate 生成一整段聊天对话格式 给**聊天模型&#xff08;ChatGLM、Qwen、GP…...

3步实战指南:轻松搭建抖音直播间弹幕数据抓取系统

3步实战指南&#xff1a;轻松搭建抖音直播间弹幕数据抓取系统 【免费下载链接】DouyinLiveWebFetcher 抖音直播间网页版的弹幕数据抓取&#xff08;2024最新版本&#xff09; 项目地址: https://gitcode.com/gh_mirrors/do/DouyinLiveWebFetcher 想象一下&#xff0c;你…...