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

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,解构,等等 这些丰富的功能时,也可以使用数据类

相关文章:

  • uniapp开发小程序,如何根据权限动态配置按钮或页面内容
  • 【Java学习笔记】抽象类
  • Redis 性能优化:核心技术、技巧与最佳实践
  • C++(4)
  • 第7章:Zephyr 的低功耗机制
  • 跟着华为去变革 ——读《常变与长青》有感
  • 读懂 std::true_type 和 std::false_type
  • 2025年- H52-Lc160--114. 二叉树展开为链表(前序遍历 + 用栈 + 原地修改)--Java版
  • 04_redis之ZSet使用实例-积分榜
  • leetcode-295 Find Median from Data Stream
  • Wan2.1 图生视频 多卡推理批量生成视频
  • 视频问答功能播放器(视频问答)视频弹题功能实例
  • ffmpeg转换竖屏(画面是横屏旋转90度的竖屏文件格式)视频到横屏
  • 网易互娱游戏研发实习一面
  • 在 ElementUI 中实现 Table 单元格合并
  • 萤石云实际视频实时接入(生产环境)
  • Node.js全局对象详解:console、process与核心功能
  • [ARM][架构] 01.ARMv7 特权等级与核心寄存器
  • 代码随想录算法训练营第60期第四十八天打卡
  • 开源 FcDesigner 表单设计器组件事件详解
  • 做网站seo的公司/网络营销模式下品牌推广研究
  • 网站备案承诺书填写/百度下载安装2022最新版
  • 网站建设 任务/首页关键词排名
  • 商务网站建设毕业设计模板下载/快速seo整站优化排行
  • 异地网站建设公司/搜索引擎优化方法有哪几种
  • 广东制作公司网站/seo新人培训班