参考原文:http://kotlinlang.org/docs/reference/data-classes.html
数据类(Data Classes)
类似于Java bean类,只是用来保存数据而不做其他的逻辑操作,在Kotlin中称为“data class”,使用“data”关键字标识:
data class User(val name: String, val age: Int) |
编译器会自动根据主构造器定义的参数属性生成下面的函数:
Ø equals()
/hashCode()
Ø toString() 格式:"User(name=John, age=42)"
Ø componentN() 对应按照定义的顺序排列的所有属性
Ø copy()
注:若这些函数有在类中显式定义或继承得到,不会再生成默认的实现。
为了保持代码的一致性和有效性,数据类(DataClasses)需要满足下面几点:
1) 主构造函数至少有一个参数。
2) 主构造函数的参数需要标记为“val”或“var”。
3) 不能使用“abstract”“open”“sealed ”“inner”修饰。
4) 一般不要去继承其他类(可以实现接口)。
注:希望可以通过无参方式生成实例,需要给所有的主构造器的参数添加默认值:
data class User(valname: String = "", val age: Int = 0) // var user1 = User() |
复制
有时候,已有一个实例,需要生成一个新的实例,该实例只有部分参数值不同,其他参数不变;这就是“ copy()”函数的目的,如前面的User类的copy实现:
fun copy(name: String = this.name, age: Int = this.age) = User(name, age) |
使用方式:
val jack =User(name = "Jack", age = 1) val olderJack = jack.copy(age = 2) |
变形声明(Destructuring Declarations)
解构,可以将数据类中的参数 解构 到一个数据组中;根据数据类参数的定义顺序依次解构到数组主的参数中,如:
val jane =User("Jane", 35) val (name, age) =jane println("$name, $age years of age") // prints "Jane, 35 years of age" |