【Kotlin】data class

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)

在这里插入图片描述

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

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):

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

  2. 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, 对象引用(地址)不同
发布了640 篇原创文章 · 获赞 143 · 访问量 54万+

猜你喜欢

转载自blog.csdn.net/u010356768/article/details/103079677