Kotlin入门-数据类与密封类 的解脱,由繁至简
前言
今天是十一的大好日子,可惜好多网站不让用了。
在Kotlin中,数据类大大减少了实体类的代码量;
本节需要了解几个问题:
① data关键字实现了哪些函数?与Any相比多了哪些?
② 密封类sealed带来了什么好处?
③ 掌握 密封类的组合
这篇文章的目录如下
- 数据类
- 简述
- 密封类
- 小结
数据类
这简直就是完美解决了java中,一个数据类动不动就是一堆代码的窘境。在Kotlin中,只要一行就可以解决问题。简直便利极了。
在java中,为了解决getter & setter这种实现,特意引入了lombok。
或者在一些数据结构的response可以自动导出代码。
或许《NPE是一大优势》,然而data的存在实在幸福。
简述
建一个只包含数据的类,关键字为 data
编译器会自动的从主构造函数中根据所有声明的属性提取以下函数
自动生成的函数
- equals() / hashCode()
- toString() 格式如 “User(name=John, age=42)”
- componentN() functions 对应于属性,按声明顺序排列
- copy() 函数
data class User(val name: String, val age: Int)
复制
数据类具有非常便捷的copy实现,太快了。
在java中,这个copy引入了lombok来处理。也是麻烦的
fun copy(name: String = this.name, age: Int = this.age) = User(name, age)
看范例
data class User(val name: String, val age: Int)fun main(args: Array<String>) {val jack = User(name = "Jack", age = 1)val olderJack = jack.copy(age = 2)println(jack)println(olderJack)
}
这个简直太方便了。这里都是不一样的对象。爽的一逼。
是不是就没有浅拷贝的问题了
数据类以及解构声明
允许数据类在解构声明中使用
val jane = User("Jane", 35)
val (name, age) = jane
println("$name, $age years of age") // prints "Jane, 35 years of age"
标准数据类
标准库提供了 Pair 和 Triple
密封类
表示受限的类继承结构;
当一个值为有限几种的类型,而不能有任何其他类型时;
密封类可以有子类,但是所有的子类都必须要内嵌在密封类中。
可以理解为
- 专门用来配合 when 语句使用的类
- 有了sealed关键字,就可以避免enum无可动态添加类型的缺陷
- 因为其有子类的特性,可以方便的组合各个枚举类型
这就是enum动态扩展形式
范例
sealed class UiOp {object Show: UiOp()object Hide: UiOp()class TranslateX(val px: Float): UiOp()//新增class TranslateY(val px: Float): UiOp()//新增
}fun execute(view: View, op: UiOp) = when (op) {UiOp.Show -> view.visibility = View.VISIBLEUiOp.Hide -> view.visibility = View.GONEis UiOp.TranslateX -> view.translationX = op.px // 这个 when 语句分支不仅告诉 view 要水平移动,还告诉 view 需要移动多少距离,这在Java中实现起来并不方便is UiOp.TranslateY -> view.translationY = op.px
}
你也可以定义一组操作
val ui = Ui() +UiOp.Show +UiOp.TranslateX(20f) +UiOp.TranslateY(40f) +UiOp.Hide
这是个组合
小结
数据类:大大简化了代码量。自动生成了equals()、hashCode()、toString()、componentN()、copy()的代码。
密封类:这是enum的扩展类。操作类型有限定,但是可以自动组合
Kotlin入门-数据类与密封类 的解脱,由繁至简相关推荐
- Kotlin学习笔记12——数据类和密封类
Kotlin学习笔记12--数据类和密封类 前言 数据类 在类体中声明的属性 复制 componentN 解构声明 密封类 尾巴 前言 上一篇,我们学习了Kotlin中的拓展,今天继续来学习Kotli ...
- Kotlin入门(13)类成员的众生相
上一篇文章介绍了类的简单定义及其构造方式,当时为了方便观察演示结果,在示例代码的构造函数中直接调用toast提示方法,但实际开发是不能这么干的.合理的做法是外部访问类的成员属性或者成员方法,从而获得处 ...
- Kotlin入门(12)类的概貌与构造
上一篇文章提到泛型函数appendString是在类外面定义,这不免使人疑惑,类里面又该怎样定义成员函数呢?为解答这个疑问,接下来的几篇文章将好好描述一下Kotlin如何操作类及其对象,本篇文章先对类 ...
- kotlin sealed 中_Kotlin 数据类与密封类
我的理解密封类就是一种专门用来配合 when 语句使用的类,举个例子,假如在 Android 中我们有一个 view,我们现在想通过 when 语句设置针对 view 进行两种操作:显示和隐藏,那么就 ...
- kotlin学习之数据类(七)
目录 1. 概念 2. 自动生成函数 3. 排除元素 4. 复制 1. 概念 Kotlin的数据类相当于Java的Bean,Java的一个类都需要写getter和setter方法,代码十分臃肿,而且每 ...
- kotlin数据类_Kotlin数据类
kotlin数据类 In this tutorial, we'll look at Kotlin Data Class. If you haven't read the Kotlin Classes ...
- 快速上手 Kotlin 开发系列之数据类和枚举
本节讨论 Kotlin 的数据类.枚举类和密闭类. 数据类 数据类是 Kotlin 中很特殊的一种类,它可以将我们类中的成员变量自动的生成 getter/setter 方法,以及我们经常需要重写的 t ...
- kotlin - 数据类data
kotlin - 数据类data 在kotlin中数据类通过data关键字来修饰. 数据类需满足的条件 主构造器必须至少有一个参数 主构造器中的参数需要用var/val声明为属性 数据类不能用abst ...
- kotlin入门学习文档
kotlin入门学习文档 前言:本文会着重对比java和kotlin,方便Java选手理解 提前总结:kotlin在服务端应用本质上是基于Java进行的改进,底层都是由JVM翻译成底层语言,我们只需要 ...
最新文章
- 转挣扎的菜鸟 - 当OD不能装载也不能附加程序时
- 商务部数据揭示了零售行业的哪些新趋势?
- dojo中的dojoConfig配置
- 选哪个云计算平台部署自己的网站?
- nginx配置多个站点共用80端口
- 安装PowerDesigner造成Office2007鼠标无法正常使用
- stft isar成像 matlab,基于时频分析的ISAR成像
- 缩放浏览器不会换行_深入解析 EventLoop 和浏览器渲染、帧动画、空闲回调的关系...
- java对音频文件的频谱分析
- 天堂2地点坐标(SQL语句,可直接导入数据库)
- 2021年高压电工模拟考试系统及高压电工考试试题
- 绿坝进程关闭的简单方法
- MYSQL基础知识+运维面试题
- 十、Robotium测试入门
- ubuntu 开机后 按键 鼠标不能用
- PID原理(图形并茂)
- 开源商城WSTMart支付开发研究[转]
- 爆火的红光光浴真不是智商税,科普一下#大健康#红光光浴#红光#种光光学
- 2022张宇考研基础30讲 第十三讲 常微分方程
- 记一次 .NET 某制造业 MES 系统崩溃分析