思维导图|kotlin 数据类与密封类

大家好,我是青空。今天给大家带来的是kotlin 数据类与密封类。

图片

文末可领取大厂面试题

数据类

简述

  • 创建一个只包含数据的类,关键字为 data

  • 编译器会自动的从主构造函数中根据所有声明的属性提取以下函数

  • 自动生成的函数

  • equals() / hashCode()

  • toString() 格式如 “User(name=John, age=42)”

  • componentN() functions 对应于属性,按声明顺序排列

  • copy() 函数

data class User(val name: String, val age: Int)

复制

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.VISIBLE
    UiOp.Hide -> view.visibility = View.GONE
    is 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

这是个组合

最近又赶上跳槽的高峰期,好多粉丝,都问我有没有最新大厂面试题,我连日加班好多天,终于整理好了,1000+ 道,20多份大厂面试题大全,我会持续更新中!公众号回复【面试题】即可获取。

图片

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值