前言

今天是十一的大好日子,可惜好多网站不让用了。

在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入门-数据类与密封类 的解脱,由繁至简相关推荐

  1. Kotlin学习笔记12——数据类和密封类

    Kotlin学习笔记12--数据类和密封类 前言 数据类 在类体中声明的属性 复制 componentN 解构声明 密封类 尾巴 前言 上一篇,我们学习了Kotlin中的拓展,今天继续来学习Kotli ...

  2. Kotlin入门(13)类成员的众生相

    上一篇文章介绍了类的简单定义及其构造方式,当时为了方便观察演示结果,在示例代码的构造函数中直接调用toast提示方法,但实际开发是不能这么干的.合理的做法是外部访问类的成员属性或者成员方法,从而获得处 ...

  3. Kotlin入门(12)类的概貌与构造

    上一篇文章提到泛型函数appendString是在类外面定义,这不免使人疑惑,类里面又该怎样定义成员函数呢?为解答这个疑问,接下来的几篇文章将好好描述一下Kotlin如何操作类及其对象,本篇文章先对类 ...

  4. kotlin sealed 中_Kotlin 数据类与密封类

    我的理解密封类就是一种专门用来配合 when 语句使用的类,举个例子,假如在 Android 中我们有一个 view,我们现在想通过 when 语句设置针对 view 进行两种操作:显示和隐藏,那么就 ...

  5. kotlin学习之数据类(七)

    目录 1. 概念 2. 自动生成函数 3. 排除元素 4. 复制 1. 概念 Kotlin的数据类相当于Java的Bean,Java的一个类都需要写getter和setter方法,代码十分臃肿,而且每 ...

  6. kotlin数据类_Kotlin数据类

    kotlin数据类 In this tutorial, we'll look at Kotlin Data Class. If you haven't read the Kotlin Classes ...

  7. 快速上手 Kotlin 开发系列之数据类和枚举

    本节讨论 Kotlin 的数据类.枚举类和密闭类. 数据类 数据类是 Kotlin 中很特殊的一种类,它可以将我们类中的成员变量自动的生成 getter/setter 方法,以及我们经常需要重写的 t ...

  8. kotlin - 数据类data

    kotlin - 数据类data 在kotlin中数据类通过data关键字来修饰. 数据类需满足的条件 主构造器必须至少有一个参数 主构造器中的参数需要用var/val声明为属性 数据类不能用abst ...

  9. kotlin入门学习文档

    kotlin入门学习文档 前言:本文会着重对比java和kotlin,方便Java选手理解 提前总结:kotlin在服务端应用本质上是基于Java进行的改进,底层都是由JVM翻译成底层语言,我们只需要 ...

最新文章

  1. 转挣扎的菜鸟 - 当OD不能装载也不能附加程序时
  2. 商务部数据揭示了零售行业的哪些新趋势?
  3. dojo中的dojoConfig配置
  4. 选哪个云计算平台部署自己的网站?
  5. nginx配置多个站点共用80端口
  6. 安装PowerDesigner造成Office2007鼠标无法正常使用
  7. stft isar成像 matlab,基于时频分析的ISAR成像
  8. 缩放浏览器不会换行_深入解析 EventLoop 和浏览器渲染、帧动画、空闲回调的关系...
  9. java对音频文件的频谱分析
  10. 天堂2地点坐标(SQL语句,可直接导入数据库)
  11. 2021年高压电工模拟考试系统及高压电工考试试题
  12. 绿坝进程关闭的简单方法
  13. MYSQL基础知识+运维面试题
  14. 十、Robotium测试入门
  15. ubuntu 开机后 按键 鼠标不能用
  16. PID原理(图形并茂)
  17. 开源商城WSTMart支付开发研究[转]
  18. 爆火的红光光浴真不是智商税,科普一下#大健康#红光光浴#红光#种光光学
  19. 2022张宇考研基础30讲 第十三讲 常微分方程
  20. 记一次 .NET 某制造业 MES 系统崩溃分析

热门文章

  1. 现在写Android,性能优化太重要了!
  2. 弹跳机器人 桌游_《碰撞机器人 Ricochet Robots 》介绍
  3. vue引入svg图片
  4. 去除idea中xml文件的黄色背景
  5. android隐藏虚拟按键的几种方式
  6. 张良(?—前189年)
  7. PhotoShop一键修改4的倍数图片工具
  8. 小米笔记本Pro ubuntu 18.04安装显卡驱动
  9. 实体操盘手开发分销商城小程序商业模式解析
  10. 快速分析出京东快递大量单号物流是否延误