数据类

我们经常创建一个类,但仅仅是用来保存数据。在这样的类中一些标准的功能经常是机械性的可以从数据进行推导。在Kotlin中,这叫做数据类,使用data标记。

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

编译器会自动根据主构造器中声明的所有属性添加如下方法:

  • equals()、hashCode()
  • toString,格式为"User(name=John, age=42)"
  • componentN()函数,N按照它们定义的顺序从1开始递增
  • copy()

如果任何的这些函数被显示的定义了或者从基类中继承了,编译器将不会自动生成这些方法。

为确保这些生成代码的一致性,并实现有意义的行为,数据类要满足下面的要求:

  • 主构造器需要包含至少一个参数
  • 所有的主构造器参数必须标记为valvar
  • 数据类不能使抽象、open、sealed或内部类
  • 在Kotlin1.1之前,数据类只能实现接口

从Kotlin 1.1后,数据类可以继承其他类。

在JVM中,如果生成的class需要一个参数的构造器,所有属性的默认值必须指定。

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

results matching ""

    No results matching ""