Kotlin-数据类

我们经常创建一个类,除了保存数据之外什么也不做.像这样的类,只是机械的传输数据,在Kotlin中,我们称它为数据类,用data关键字来标识。

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

编译器会自动的把主要构造方法中声明的所有属性添加到以下成员中:
- equals()/hashCode()
- toString ,类似于”User(name=MK,age=18)”
- copy 函数
- 组成函数(componentN() functions corresponding to the properties in their order of declaration:符合属性声明顺序的函数)

除了这些明确声明的函数或从父类继承来的函数,类中不会再包含其他函数

为了确保代码的一致性和明确的意义,数据类应该满足以下条件:
- 主要构造方法必须有一个参数以上
- 主要构造方法中的所有参数都必须是val或var修饰
- 数据类不可以是抽象类,开放,被封装或是内部类
- (在版本1.1以前)数据类只能实现于接口

注意:从版本1.1以后,数据类就可以继承类
在JVM上,如果生成的类需要有参数的构造方法,那么所有属性都必须有初始值:

data class Data(val name:String="",val age:Int=0)

克隆

在很多情况下,我们需要复制对象部分或全部属性,并且还要保持这些属性不变,这个时候,就产生了copy()函数,在上面的User类中,它的实现可能是这样:

fun copy(name:String=this.name,age:Int=this.age)=User(name,age)

我们可以这样使用:

val jack=User(name="Jack",age=1)
val oldJack=jack.copy(age=2)

标准数据类

在标准库中提供了Pair和Triple,但在多数情况下,声明数据类还是更好的选择,因为他们使得代码阅读性更好,属性命名更有意义。

你可能感兴趣的:(我和Android,Kotlin)