数据类
我们经常创建一个类,但仅仅是用来保存数据。在这样的类中一些标准的功能经常是机械性的可以从数据进行推导。在Kotlin中,这叫做数据类,使用data标记。
data class User(val name: String, val age: Int)
编译器会自动根据主构造器中声明的所有属性添加如下方法:
- equals()、hashCode()
- toString,格式为"User(name=John, age=42)"
- componentN()函数,N按照它们定义的顺序从1开始递增
- copy()
如果任何的这些函数被显示的定义了或者从基类中继承了,编译器将不会自动生成这些方法。
为确保这些生成代码的一致性,并实现有意义的行为,数据类要满足下面的要求:
- 主构造器需要包含至少一个参数
- 所有的主构造器参数必须标记为val或var
- 数据类不能使抽象、open、sealed或内部类
- 在Kotlin1.1之前,数据类只能实现接口
从Kotlin 1.1后,数据类可以继承其他类。
在JVM中,如果生成的class需要一个参数的构造器,所有属性的默认值必须指定。
data class User(val name: String = "", val age: Int = 0)