【Kotlin】数据类 data class、copy、componentN函数 您所在的位置:网站首页 关于函数中的返回类型下列表述中错误的是 【Kotlin】数据类 data class、copy、componentN函数

【Kotlin】数据类 data class、copy、componentN函数

2023-06-10 03:53| 来源: 网络整理| 查看: 265

data class 应用场景

创建一些类除了保存数据不干其他事情,比如我们解析网络请求下来的数据。Kotlin就提供了一个非常方便的class—— data class,就像上边的栗子

data class Girl(var name:String,var age:Int,var height:Int,var address:String)

在Kotlin中,声明类的同时可以方便的直接声明构造方法等参数,鉴于data class只是存放数据,那么只一个构造方法足矣

data class为我们做了什么

编译器会根据我们在构造函数里声明的属性自动导出下列成员:

equals()/hashCode() toString()方法 componentN()方法 copy()方法 var girl1:Girl = Girl("嫚嫚",29,160,"廊坊") var girl2:Girl = Girl("嫚嫚",29,160,"廊坊") println(girl1.equals(girl2)) println(girl1.hashCode()) println(girl1)

image.png

如果数据类需要无参构造函数,则所有属性必须有默认值:

data class Girl(var name:String = "",var age:Int = 0,var height:Int = 0,var address:String = "") var girl3:Girl = Girl() copy函数

当要复制一个对象,只改变一些属性,但其余不变,copy()就是为此而生

var girl1: Girl = Girl("嫚嫚", 29, 160, "廊坊") var girl2: Girl = girl1.copy("二帆")//传递第一参数,第二参数默认 var girl3: Girl = girl1.copy("真真", 28, 168, "福建")//传递所有参数 var girl4: Girl = girl1.copy(age = 30) //命名参数,传递指定参数 println("$girl1,$girl2,$girl3,$girl4") //结果 Girl(name=嫚嫚, age=29, height=160, address=廊坊), Girl(name=二帆, age=29, height=160, address=廊坊), Girl(name=真真, age=28, height=168, address=福建), Girl(name=嫚嫚, age=30, height=160, address=廊坊) componentN函数-解构声明(Destructuring Declarations)

编译器为数据类(data class)自动声明componentN()函数,可直接用解构声明

var girl1: Girl = Girl("嫚嫚", 29, 160, "廊坊") var (a,b,c,d) = girl1 println("$a,$b,$c,$d")

在这里插入图片描述

两个等号==和三个等号===

Kotlin有两种相等性(equality):

Referential/引用相等(两个引用指向同一对象): ===(否定形式!==) 三个等号===比较,是对象引用(地址),即判断是否同一个对象

Structural/结构相等(用equals()检查): ==(否定形式!=) 两个等号==比较,是通过equals()函数进行比较

var girl1: Girl = Girl("嫚嫚", 29, 160, "廊坊") var girl2: Girl = Girl("嫚嫚", 29, 160, "廊坊") var girl3: Girl = Girl("富婆", 30, 158, "贵州") println(girl1 == girl2) //输出true, 对象数据相同 println(girl2 == girl3) //输出false, 对象数据不同 // girl1,girl2,girl3都是不同对象,即对象引用(地址)不同 println(girl1 === girl2) //输出false, 对象引用(地址)不同 println(girl1 === girl3) //输出false, 对象引用(地址)不同


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有