Kotlin学习34-data数据类1

定义如下:与普通类对比学习

//普通类
class NormalClass(val name: String, val age: Int, val sex: Char)
//数据类
data class DataClass(val name: String, val age: Int, val sex: Char)

对应找到java反编译的代码路径:Tool-->Kotlin-->Show Kotlin Bytecode-->Decompile-->DataClass.decompiled.java下关键代码如下:

public final class NormalClass {@NotNullprivate final String name;private final int age;private final char sex;@NotNullpublic final String getName() {return this.name;}public final int getAge() {return this.age;}public final char getSex() {return this.sex;}public NormalClass(@NotNull String name, int age, char sex) {Intrinsics.checkNotNullParameter(name, "name");super();this.name = name;this.age = age;this.sex = sex;}
}
public final class DataClass {@NotNullprivate final String name;private final int age;private final char sex;@NotNullpublic final String getName() {return this.name;}public final int getAge() {return this.age;}public final char getSex() {return this.sex;}public DataClass(@NotNull String name, int age, char sex) {Intrinsics.checkNotNullParameter(name, "name");super();this.name = name;this.age = age;this.sex = sex;}@NotNullpublic final String component1() {return this.name;}public final int component2() {return this.age;}public final char component3() {return this.sex;}@NotNullpublic final DataClass copy(@NotNull String name, int age, char sex) {Intrinsics.checkNotNullParameter(name, "name");return new DataClass(name, age, sex);}// $FF: synthetic methodpublic static DataClass copy$default(DataClass var0, String var1, int var2, char var3, int var4, Object var5) {if ((var4 & 1) != 0) {var1 = var0.name;}if ((var4 & 2) != 0) {var2 = var0.age;}if ((var4 & 4) != 0) {var3 = var0.sex;}return var0.copy(var1, var2, var3);}@NotNullpublic String toString() {return "DataClass(name=" + this.name + ", age=" + this.age + ", sex=" + this.sex + ")";}public int hashCode() {String var10000 = this.name;return ((var10000 != null ? var10000.hashCode() : 0) * 31 + Integer.hashCode(this.age)) * 31 + Character.hashCode(this.sex);}public boolean equals(@Nullable Object var1) {if (this != var1) {if (var1 instanceof DataClass) {DataClass var2 = (DataClass)var1;if (Intrinsics.areEqual(this.name, var2.name) && this.age == var2.age && this.sex == var2.sex) {return true;}}return false;} else {return true;}}
}

对比可知:

普通类:set get 构造

数据类:set get 构造 copy toString hashCode equals  解构操作component(0..参数个数)个方法

//普通类
class NormalClass(val name: String, val age: Int, val sex: Char)//数据类
data class DataClass(val name: String, val age: Int, val sex: Char)fun main() {val normal1 = NormalClass("张三", 10, '男')val normal2 = NormalClass("张三", 10, '男')val data1 = DataClass("张三", 10, '男')val data2 = DataClass("张三", 10, '男')println("normal1 : $normal1")println("data1 : $data1")println("normal1==normal2: ${normal1 == normal2}")println("normal1.equals(normal2): ${normal1.equals(normal2)}")//equals <==> ==println("data1==data2: ${data1 == data2}")println("data1.equals(data2): ${data1.equals(data2)}") //equals <==> ==
}

结果如下:

注意:copy toString hashCode equals  解构操作等只管主构造,不管次构造。

          也就是说调用次构造函数的时候不要妄图使用上面这些重写的方法,toStirng方法除外。

数据类的使用条件:

条件一:服务器请求回来的响应的 JavaBean LoginResponseBean 基本上可以使用 数据类        条件二:数据类至少必须有一个参数的主构造函数
条件三:数据类必须有参数, var val 的参数
条件四:数据类不能使用 abstract,open,sealed,inner 等等 修饰 (数据类,数据载入的事情 数据存储)                                                                                                                                                条件五:需要  比较,copy,tostring,解构,等等 这些丰富的功能时,也可以使用数据类

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

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

相关文章

博图SCL基础知识-表达式及赋值运算

S7-1200 从 V2.2 版本开始支持 SCL 语言。 语言元素 SCL 除了包含 PLC 的典型元素&#xff08;例如&#xff0c;输入、输出、定时器或存储器位&#xff09;外&#xff0c;还包含高级编程语言表达式、赋值运算和运算符。 程序控制语句 SCL 提供了简便的指令进行程序控制。例…

海思3519V200ARM Linux 下移植 Qt5.8.0

一、移植背景及意义 海思3519V200是一款基于ARM架构的嵌入式芯片,广泛应用于智能安防、工业控制等领域。在这些应用场景中,对设备的图形用户界面(GUI)有着越来越高的要求。Qt5.8.0作为一个功能强大、跨平台的GUI开发框架,能够帮助开发者快速开发出美观、高效的用户界面。…

msql的乐观锁和幂等性问题解决方案

目录 1、介绍 2、乐观锁 2.1、核心思想 2.2、实现方式 1. 使用 version 字段&#xff08;推荐&#xff09; 2. 使用 timestamp 字段 2.3、如何处理冲突 2.4、乐观锁局限性 3、幂等性 3.1、什么是幂等性 3.2、乐观锁与幂等性的关系 1. 乐观锁如何辅助幂等性&#xf…

成都鼎讯--通信信号模拟设备​

在现代电磁通信领域&#xff0c;精准模拟复杂多变的信号环境&#xff0c;是提升通信装备性能与人员作战能力的核心命题。成都鼎讯以技术创新为驱动&#xff0c;凭借深厚的研发实力&#xff0c;重磅推出通信信号模拟设备&#xff0c;以前所未有的强大功能与卓越性能&#xff0c;…

C# Windows Forms应用程序-003

目录 项目结构 命名空间和类定义 主要控件 GroupBox 控件 Label 控件 TextBox 控件 Button 控件 OpenFileDialog 控件 方法说明 构造函数 Form1() Dispose(bool disposing) Main() InitializeComponent() button1_Click(object sender, System.EventArgs e) but…

【C/C++】死锁的四大条件与预防策略详解

文章目录 死锁的四大条件与预防策略详解一、死锁的产生条件&#xff08;四个必要条件&#xff09;二、代码示例三、死锁的预防手段&#xff08;以 C/C 为例&#xff09;1. 破坏“循环等待” —— 统一加锁顺序&#xff08;推荐&#xff09;2. 使用 std::lock 一次性加多个锁3. …

Rust编程环境安装

文章目录 Rust编程环境安装一、安装准备二、安装步骤对于Linux/macOS用户对于Windows用户 三、验证安装四、环境配置检查五、工具链管理六、附加功能七、常见问题处理八、编辑器支持九、其他 Rust编程环境安装 一、安装准备 1. 支持系统&#xff1a;Windows/Linux/macOS 2. 所…

OpenHarmony平台驱动使用(五),HDMI

OpenHarmony平台驱动使用&#xff08;五&#xff09; HDMI 概述 功能简介 HDMI&#xff08;High Definition Multimedia Interface&#xff09;&#xff0c;即高清多媒体接口&#xff0c;主要用于DVD、机顶盒等音视频Source到TV、显示器等Sink设备的传输。 HDMI以主从方式工…

【Git】Commit Hash vs Change-Id

文章目录 1、Commit 号2、Change-Id 号3、区别与联系4、实际场景示例5、为什么需要两者&#xff1f;6、总结附录——Gerrit 在 Git 和代码审查工具&#xff08;如 Gerrit&#xff09;中&#xff0c;Commit 号&#xff08;Commit Hash&#xff09; 和 Change-Id 号 是两个不同的…

leetcode hot100刷题日记——21.不同路径

和20题一样的思路link 题解&#xff1a; class Solution { public:int dfs(int i,int j,vector<vector<int>>&memo){//超过了边界&#xff0c;return 0if(i<0||j<0){return 0;}//从&#xff08;0&#xff0c;0&#xff09;到&#xff08;0&#xff0c;0…

day2 MySQL表数据操作

一&#xff1a;数据操作 注&#xff1a;在编写MySQL代码时可以不用区分大小写 1.查看表结构 desc 表名; -- 查看表中的字段类型&#xff0c;长度&#xff0c;约束。 2.字段的增加 AFTER table 表名 add 字段名 数据类型; -- 默认末尾添加 after table 表名 add 字段名 …

GitAny - 無需登入的 GitHub 最新倉庫檢索工具

地址&#xff1a;https://github.com/MartinxMax/gitany GitAny - 無需登入的 GitHub 專案搜尋工具 GitAny 是一款基於 Python 的工具&#xff0c;允許你在無需登入的情況下搜尋當天最新的 GitHub 專案。它支援模糊搜尋、條件篩選以及倉庫資料的視覺化分析。 安裝依賴 $ pip…

格恩朗金属管浮子流量计 高精度测量的不二之选​

在流量测量的复杂领域&#xff0c;精度就是生命线&#xff0c;直接关乎生产的稳定性、产品的质量以及资源的合理利用。大连格恩朗品牌的金属管浮子流量计&#xff0c;凭借其卓越的精度表现&#xff0c;成为各行业在流量测量时的最佳之选。​ 格恩朗金属管浮子流量计运用经典的可…

【R语言编程绘图-箱线图】

基本箱线图绘制 使用ggplot2绘制箱线图的核心函数是geom_boxplot()。以下是一个基础示例&#xff0c;展示如何用iris数据集绘制不同物种&#xff08;Species&#xff09;的萼片长度&#xff08;Sepal.Length&#xff09;分布&#xff1a; library(ggplot2) ggplot(iris, aes(…

深度学习能取代机器学习吗?

在人工智能领域&#xff0c;“机器学习”和“深度学习”这两个词经常被混为一谈。很多新手甚至以为只要跟 AI 有关的任务&#xff0c;都该用深度学习。但其实&#xff0c;它们并不是谁强谁弱的关系&#xff0c;而是适合不同场景的工具。 这篇文章就来帮你理清楚&#xff1a; 机…

UPS的工作原理和UPS系统中旁路的作用

UPS&#xff08;不间断电源&#xff09;根据工作原理和适用场景的不同&#xff0c;主要分为以下三种类型&#xff0c;每种类型的特点和适用场景如下&#xff1a; 1. 后备式UPS&#xff08;Offline/Standby UPS&#xff09; 工作原理&#xff1a; 正常供电时&#xff0c;负载直接…

一级菜单401问题

正常代码生成的前后台文件&#xff0c;菜单类型是一级标题&#xff0c; 菜单路径和前端组件的地址都正常写的:/projects/xxx/xxx/xxx/XxxList 其他生成的新列表都能点进去&#xff0c;只有这个点进去就是显示空白的像首页那个页面一样&#xff0c; 问题就出现在我第一次建这…

ROS2 robot控制学习(一)

controller_position.yaml使用说明 ROS 2 的 controller_manager 用途典型工作流程示例关键服务与话题扩展功能JointTrajectoryController 参数详解基本参数轨迹参数插值参数前馈控制代码示例动态参数调试参数ForwardCommandController 概述参数解释`joints``interface``allow_…

LightGBM的python实现及参数优化

文章目录 1. LightGBM模型参数介绍2. 核心优势3. python实现LightGBM3.1 基础实现3.1.1 Scikit-learn接口示例3.1.2 Python API示例 3.2 模型调优3.2.1 GridSearchCV简介3.2.2 LightGBM超参调优3.2.3 GridSearchCV寻优结果 在之前的文章 Boosting算法【AdaBoost、GBDT 、XGBoo…

Map集合(双列集合)

Map结合也称为“键值对集合”&#xff0c;格式&#xff1a;{key1value1&#xff0c;key2value2....} Map集合的特点&#xff1a; 键唯一&#xff1a;在Map集合中&#xff0c;键&#xff08;key&#xff09;是唯一的&#xff0c;不能有重复的键。如果尝试插入一个已经存在的键…