数据类简介
Kotlin中的数据类是一种功能强大的类,他可以让我们避免创建Java中的用于保存数据的类但又操作简单POJO模板代码。他们通常只提供了用于访问他们属性的加单的getter和setter
注:POJO是Plain OrdinaryJava Object的缩写,可以理解为简单的Java对象,即我们平时所说的JavaBean。
数据类的定义
通常使用Data关键字定义一个简单的数据类,例如我们定义一个类:
data class Article(var title: String?, var desc: String?) {
var detailUrl: String? = null
constructor(title: String?, desc: String?, detail: String?) : this(title, desc) {
this.detailUrl = detail
}
init {
this.title = title
this.desc = desc
this.detailUrl = detailUrl
}
}
注:创建数据类的时候,我们必须要包含至少一个(var/val)元素的主要构造函数,因为你去调用copy函数复制对象的时候,实际上就是调用主要构造函数去重新创建一个数据类对象。
数据类中的一些函数和使用
除了前面说到的get和set函数,数据类中还有一些其他对我们有用的函数
- equals:比较两个对象的属性确保他们是相同的
- hashCode:得到一个从属性中计算出来的hash值
- copy:复制一个对象,可以根据需要去修改一些属性
复制一个数据类
在Java中,我们常常需要去修改对象的某个或多个状态,但又不影响原来的使用,被迫的我们只能去创建一个新的对象,并赋原对象的值,修改需要改变的值,这常常是繁琐且没有意义的工作,使用Kotlin中的数据类可以帮我们高效的解决这个问题。
例如:
var article:Article = Article("NBA","LBJFAN","NBA-LBJFAN")
var article1 = article.copy("1","2")
注:copy中的参数与对应数据类主要构造函数中的属性相对应,如果想要单独修改某个属性,可使用属性名=值得方式。打印结果如下:
08-24 17:34:51.369 6630-6630/com.example.lbjfan.kotlindemo I/MainActivity: article=title:NBA-desc:LBJFAN-detail:NBA-LBJFAN
08-24 17:34:51.369 6630-6630/com.example.lbjfan.kotlindemo I/MainActivity: article1=title:1-desc:2-detail:null
映射对象到变量中
映射对象的每一个属性到一个变量中,这个过程就是我们平时所说的多声明,例如:
var (mTitle) = article //映射一个属性
var (mTitle1,mDesc) =article //映射两个属性
上面这两个多声明分别会被编译成下面的代码:
var mTitle = article.title
var mTitle1 = article.title
var mDesc = article.detailUrl
注:当我们映射对象属性到变量中的时候,变量的个数不能超过主要构造函数中定义的属性的个数,并且映射的属性是一一对应的。