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

东莞做网站 信科网络免费文档网站

东莞做网站 信科网络,免费文档网站,32层建筑工期是,企业建站为什么选择网站定制Kotlin 中的 data 关键字用于声明数据类(Data Class),它专门为简化数据模型的实现而设计的。 1 主构造函数必须至少有一个参数,且参数标记为 val 或 var 数据类的主构造函数必须至少有一个参数,并且这些参数必须使用…

Kotlin 中的 data 关键字用于声明数据类(Data Class),它专门为简化数据模型的实现而设计的。

1 主构造函数必须至少有一个参数,且参数标记为 valvar

数据类的主构造函数必须至少有一个参数,并且这些参数必须使用 valvar 声明。普通类则没有这样的要求。

在这里插入图片描述

正确的数据类定义:

data class User(val name: String, val age: Int)

普通类的主构造函数可以没有参数要求:

class Studentclass Person(val name: String, val age: Int)

2 自动生成标准方法

数据类会自动生成以下方法,而普通类需要手动实现或依赖 IDE 生成。

以下是定义的一个数据类 User

data class User(val name: String, val age: Int)

反编译成 Java 代码:

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

通过上述代码可以看出,数据类自动生成了以下方法:

  • toString():生成格式化的字符串表示,如:User(name=John, age=30)
  • componentN() 函数:支持解构声明访问属性;
  • equals()hashCode() :比较两个对象的内容是否相等(而非引用相等),仅基于主构造函数中声明的属性;
  • copy() 方法:快速创建对象的副本,并可选择性修改部分属性(适用于不可变对象);

以下是使用示例:

data class User(val name: String, val age: Int)class Person(val name: String, val age: Int)fun main() {val user = User("John", 30)// toString 格式化输出println(user.toString()) // User(name=John, age=30)// 解构声明,解构为 name 和 ageval (name, age) = userprintln("name = $name, age = $age") // name = John, age = 30// equals() 比较内容val user1 = User("Danny", 31)val user2 = User("Danny", 31)// 数据类自动重写了 equals() 方法,比较内容println("user1 == user2 ? ${user1 == user2}") // user1 == user2 ? true,val person1 = Person("Danny", 31)val person2 = Person("Danny", 31)// 普通类默认比较引用println("person1 == person2 ? ${person1 == person2}") // person1 == person2 ? false // copy() 创建副本val newUser = user.copy(age = 32)println("newUser.age = ${newUser.age}") // newUser.age = 32
}

注意:

  • 仅主构造函数的属性参与方法的生成: 类体中定义的属性不会影响 equalshashCode 等方法;
  • 不可变推荐:数据类通常设计为不可变(属性用 val 声明),避免因修改状态导致意外问题;
  • 深拷贝与浅拷贝:copy 方法是浅拷贝,若属性是引用类型(如集合、对象)、需自行处理深拷贝逻辑;

3 数据类不能是 abstractopensealedinner

从 Kotlin 1.1 开始,数据类可以继承其他类。

4 和普通类对比

数据类和普通类对比

http://www.dtcms.com/wzjs/575697.html

相关文章:

  • 乐山 做网站wordpress例
  • 食品公司建设网站目的百度优化怎么做
  • 本地服务器域名解析网站建设邢台123交友信息手机版
  • 上海正规网站建设耗材aso平台
  • 青岛网站设计建议i青岛博采做专门的表白网站
  • 无锡公司网站建设视频网站建设公司排名
  • 龙岩有什么招聘本地网站wordpress 新建表单
  • 网站备案授权书模板ps怎么排版规划设计网站
  • 西安网站推广招聘网芜湖公司企业排名
  • 30g月流量网站如何建立属于自己的网址
  • 创意网站推荐今天郑州新闻头条
  • 怎么做扫二维码就可以进入网站杭州网站设计优异柚v米科技
  • 网站开发方式演进展示型网站有哪些功能
  • 需要建设一个什么样的网站网站运营做产品需要哪些知识
  • 承德网站建设案例用织梦怎么修改网站首页商品顺序
  • 微信外链网站开发网站模版html
  • 网站开发入门书籍推荐搭建wordpress服务器
  • 中高端网站建设成都企业建网站
  • 网站栏目关键词公司网站制作教学
  • 专业网站建设行业现状北京公司网站制作价格
  • 网站设计主流尺寸千锋教育成都校区
  • 做两个阿里网站吗万网创始人
  • 仙桃网站设计网站页面制作公司
  • 在线做ppt模板下载网站有哪些wordpress文章没办法显示略缩图
  • 网站排名带照片怎么做wordpress live space
  • seo做的好的网站有哪些长春网站排名优化报价
  • 个人接做网站多少钱电商网站如何做精细化运营
  • 站长之家seo查找品牌策划公司名字大全
  • 农村小学校园网站建设方案高品质网站建设公司
  • 中国有哪些网站wordpress更新定位插件