# Kotlin学习之-5.6 数据类
来源:互联网 发布:轩辕剑进阶数据 编辑:程序博客网 时间:2024/06/06 02:15
Kotlin学习之-5.6 数据类
我们经常创建一个类只是用来持有数据,不做其他事情。在这样的类中,一些标准的功能是机械地从数据中衍生出来的。在Kotlin中,这样的类叫做数据类,用data
标识:
data class User(val name: String, val age: Int)
编译器会在主构造器中,自动给定义的所有属性都派生如下的成员:
equals
/hashcode()
toString()
用这样的形式`”User(name=John, age=42)”componentN()
函数对应定义的属性copy()
函数
如果任何上述函数在类主题中定义了,或者从基类中继承了,编译器都不会自动生成对应的函数。
为了保证生成代码的一致性并且是有意义的行为,数据类必须满足如下要求:
- 主构造器必须至少有一个参数
- 所有主构造器的参数必须被标识为
val
或者var
- 数据类不能是
abstract
,open
,sealed
,inner
的 - 数据类只能实现接口(v1.1之前要求)
在v1.1之后,数据类可以扩展其他类。详见Sealed classes
在JVM上,如果生成的类需要一个无参数的构造器,那么所有属性的默认值都必须明确。
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)
这使得我们可以这样写
val jack = User(name = "Jack", age = 1)val olderJack = jack.copy(age = 2)
数据类和去结构化声明
为数据类生成的成员函数使得他们可以使用去结构化声明
val jane = User("Jane", 35)val (name, age) = janeprintln("$name, $age years old") // 输出"Jane, 35 years old"
标准数据类
标准库提供Pair
和Triple
。 在多数情况下,尽管命名的数据类在设计时是一个更好的选择,因为他们提供了有意义的属性名,这让代码可读性更好。
PS,我会坚持把这个系列写完,有问题可以留言交流,也关注专栏Kotlin for Android Kotlin安卓开发
阅读全文
1 0
- # Kotlin学习之-5.6 数据类
- kotlin学习day5:数据类
- kotlin学习之嵌套类
- Kotlin学习之枚举类
- Kotlin之数据类解构申明
- Kotlin语言学习之使用data class修饰数据类对象
- Kotlin学习之-5.1 类和继承
- Kotlin学习之-5.7 封装类
- Kotlin学习之-5.10 枚举类
- kotlin 学习之 HelloWorld
- Kotlin学习之函数
- Kotlin学习之Range
- Kotlin 学习之数据类型
- Kotlin学习之跳转
- Kotlin 学习之接口
- kotlin学习之旅
- Kotlin 学习之准备
- Kotlin学习之kotlin-android-extensions
- cvHaarDetectObjects函数参数解释
- Java中常见的50个错误、异常及规避技巧
- 浅析人脸检测之Haar分类器方法:Ha…
- 【电脑】PS如何批量处理图片
- opencv中的Cxcore绘图函数
- # Kotlin学习之-5.6 数据类
- 级联分类器训练
- [RK3288][Android6.0] WiFi之wpa_supplicant的socket(服务端)
- 象素的传统编码与基于对象和内容编…
- 【转】WMI使用的WIN32_类库名
- 怎样去掉word2007中显示的拼写检查…
- 9.2-全栈Java笔记:List接口的特点和常用方法
- OpenCV学习之三 打开视频文…
- OpenCV:IplImage和单字节ch…