大家好,我是青空。今天给大家带来的是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多份大厂面试题大全,我会持续更新中!公众号回复【面试题】即可获取。