kotlin中的数据类data class
2017-10-20 17:23
232 查看
数据类
我们经常创建一个只保存数据的类。在这样的类中一些函数只是机械的对它们持有的数据进行一些推导。在 kotlin 中这样的类称之为 data 类,用 data标注:
data class User(val name: String, val age: Int)
编译器会自动根据主构造函数中声明的所有属性添加如下方法:
equals()/
hashCode函数
toString格式是 "User(name=john, age=42)"
[compontN()functions] (http://kotlinlang.org/docs/reference/multi-declarations.html)
对应按声明顺序出现的所有属性
copy()函数
如果在类中明确声明或从基类继承了这些方法,编译器不会自动生成。
为确保这些生成代码的一致性,并实现有意义的行为,数据类要满足下面的要求:
注意如果构造函数参数中没有
val或者
var,就不会在这些函数中出现;
主构造函数应该至少有一个参数;
主构造函数的所有参数必须标注为
val或者
var;
数据类不能是 abstract,open,sealed,或者 inner ;
数据类不能继承其它的类(但可以实现接口)。
在 JVM 中如果构造函数是无参的,则所有的属性必须有默认的值,(参看Constructors);
data class User(val name: String = "", val age: Int = 0)
复制
我们经常会对一些属性做修改但想要其他部分不变。这就是 copy()函数的由来。在上面的 User 类中,实现起来应该是这样:
fun copy(name: String = this.name, age: Int = this.age) = User(name, age)
有了 copy 我们就可以像下面这样写了:
val jack = User(name = "jack", age = 1) val olderJack = jack.copy(age = 2)
数据类和多重声明
组件函数允许数据类在多重声明中使用:val jane = User("jane", 35) val (name, age) = jane println("$name, $age years of age") //打印出 "Jane, 35 years of age"
标准数据类
标准库提供了 Pair和
Triple。在大多数情形中,命名数据类是更好的设计选择,因为这样代码可读性更强而且提供了有意义的名字和属性。
相关文章推荐
- Kotlin语言学习之使用data class修饰数据类对象
- Kotlin类和对象 (六)--- 数据类 (data class)
- Kotlin教程学习-dataclass,objectclass,use函数,类扩展,socket
- Kotlin基础教程之dataclass,objectclass,use函数,类扩展,socket
- 代码坏的味道20:纯稚的数据类 (Data Class)
- 转:代码的坏味道之二十 :Data Class(纯稚的数据类)或POJO
- Kotlin-13.数据类(data class)
- Kotlin Reference (十三) Data Class and Sealed Classes
- Kotlin Data Class
- 3.20 Data class(纯稚的数据类)
- 代码的坏味道之二十 :Data Class(纯稚的数据类)
- Kotlin data class 重写getter setter处理,支持Parcelable的intent传递和Gson解析
- KotLin——Data class 使用
- JsonToKotlin(Kotlin开发神器)----Json数据示例直接生成Kotlin Data Class 开发插件
- Kotlin Reference (八) 可见性修饰符, data class,object Claz
- 重新组织数据之十二 :Replace Record with Data Class(以数据类取代记录)
- adodb+smarty+myClass 结合-数据类的智能操作
- PHP Encrypt/Decrypt: Simple class to encrypt url data
- Failed to instantiate [org.springframework.data.domain.Pageable]: Specified class is an interface
- ADO.NET Data Service 二 绑定数据类