Kotlin学习笔记之 9 数据类与密封类

Kotlin学习笔记之 9 数据类与密封类_第1张图片

首发于公众号: DSGtalk1989

9.Kotlin 数据类与密封类

  • 数据类

    在class前面加上data关键字,这个类就变成了数据类,会自动添加我们一般在java中需要添加的方法

    数据类不能继承,也不能被继承。

    数据类的主构造函数不能无参

    数据类的copy方法可以直接进行修改

     var s = Student("Tom", 23)
     var a = s.copy(age = 18)
    
  • 密封类

    又叫做密闭类,一般用来替代java中枚举类

    sealed class UiOp {
          object Show: UiOp()
          object Hide: UiOp()
      } 
      fun execute(view: View, op: UiOp) = when (op) {
          UiOp.Show -> view.visibility = View.VISIBLE
          UiOp.Hide -> view.visibility = View.GONE
      }
    

    实际上我们不一定要内部继承的方式,卸载外面也行,不要被这种形式拘泥。

    上面的例子就是我们定力了枚举展示和隐藏,然后通过when的方式,去操作View

    单单这个例子是看不出密闭类的优越性的,如果我们还需要对View进行移动的话,枚举就做不到了,但是密闭类可以。

    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.VISIBLE
          UiOp.Hide -> view.visibility = View.GONE
          // 这个 when 语句分支不仅告诉 view 要水平移动,还告诉 view 需要移动多少距离,这是枚举等 Java 传统思想不容易实现的
          //注意这里的is
          is UiOp.TranslateX -> view.translationX = op.px 
          UiOp.TranslateY() -> view.translationY = op.px
      }
    

    所以密闭类在我看来就是java枚举的拓展

    并且密闭类只能在一个文件中进行申明

    封闭类如果是class的话,用when匹配必须要加 is 或者 直接生成对象()


Kotlin学习笔记之 1 基础语法

Kotlin学习笔记之 2 基本数据类型

Kotlin学习笔记之 3 条件控制

Kotlin学习笔记之 4 循环控制

Kotlin学习笔记之 5 类和对象

Kotlin学习笔记之 6 继承

Kotlin学习笔记之 7 接口

Kotlin学习笔记之 8 扩展

Kotlin学习笔记之 9 数据类与密封类

Kotlin学习笔记之 10 泛型

Kotlin学习笔记之 11 枚举类

Kotlin学习笔记之 12 对象表达式和对象声明

Kotlin学习笔记之 13 基础操作符run、with、let、also、apply

Kotlin学习笔记之 14 包与导入

Kotlin学习笔记之 15 伴生对象

Kotlin学习笔记之 16 委托

Kotlin学习笔记之 17 可观察属性

Kotlin学习笔记之 18 函数

Kotlin学习笔记之 19 高阶函数与 lambda 表达式

Kotlin学习笔记之 20 内联函数

Kotlin学习笔记之 21 解构声明

Kotlin学习笔记之 22 集合

Kotlin学习笔记之 23 相等判断

Kotlin学习笔记之 24 操作符重载

Kotlin学习笔记之 25 异常捕捉

Kotlin学习笔记之 26 反射

Kotlin学习笔记之 27 类型别名

Kotlin学习笔记之 28 协程基础

Kotlin学习笔记之 29 上下文与调度器

Kotlin学习笔记之 30 协程取消与超时

Kotlin学习笔记之 31 协程挂起函数的组合

Kotlin学习笔记之 32 协程异常处理

Kotlin学习笔记之 33 协程 & Retrofit

你可能感兴趣的:(Kotlin学习笔记之 9 数据类与密封类)