当我们想要确保给定类型的值只能来自特定的有限子类型集时,密封类很有用。 换句话说,密封类用于表示受限类层次结构,当一个值可以具有受限集中的一种类型,但不能具有任何其他类型时。 密封类具有数量有限的直接子类,所有子类都定义在与密封类本身相同的文件中。
它们是抽象的。 这意味着我们不能直接实例化密封类的实例,只能实例化声明的子类之一。
2024年07月30日
当我们想要确保给定类型的值只能来自特定的有限子类型集时,密封类很有用。 换句话说,密封类用于表示受限类层次结构,当一个值可以具有受限集中的一种类型,但不能具有任何其他类型时。 密封类具有数量有限的直接子类,所有子类都定义在与密封类本身相同的文件中。
它们是抽象的。 这意味着我们不能直接实例化密封类的实例,只能实例化声明的子类之一。
2024年07月30日
随波逐流!!
作为一名 Android 开发者,我们无法摆脱周围的协程嗡嗡声。当谈到协程时,我们经常会遇到另一个嗡嗡声,我们在 kotlin 中将其称为 FLOW。听起来很酷,它的功能也是如此。那么为什么不从基础开始探索和了解这些酷炫的 kotlin 流程。
2024年07月30日
Kotlin 协程把 suspend 修饰符引入到了我们 Android 开发者的日常开发中。您是否好奇它的底层工作原理呢?编译器是如何转换我们的代码,使其能够挂起和恢复协程操作的呢?
了解这些将会帮您更好地理解挂起函数 (suspend function) 为什么只会在所有工作完成后才会返回,以及如何在不阻塞线程的情况下挂起代码。
2024年07月30日
IF 表达式
一个 if 语句包含一个布尔表达式和一条或多条语句。
// 传统用法var max = a if (a < b) max = b// 使用 else var max: Intif (a > b) { max = a} else { max = b} // 作为表达式val max = if (a > b) a else b
2024年07月30日
LiveData 的历史要追溯到 2017 年。彼时,观察者模式有效简化了开发,但诸如 RxJava 一类的库对新手而言有些太过复杂。为此,架构组件团队打造了
2024年07月30日
一、数据初始化
var可使用laterinit来延迟初始化,需后期再初始化。
val使用 by lazy 后接初始化的表达式。
class B {
}
class A {
var num = 0
lateinit var name: String//生成A的时候,不初始化,需要初始化
2024年07月30日
2024年07月30日
作者:feintkotlin(Kotlin学习网)
说明:这篇文章讲述的是Kotlin的基础语法,可能有些比较高级的用法没有包含在里面
var
2024年07月30日
上周在内部分享会上大佬同事分享了关于 Kotlin 协程的知识,之前有看过 Kotlin 协程的一些知识,以为自己还挺了解协程的,结果...
在这一次分享中,发现 Flow 和 Channel 这一块儿知识是自己不怎么了解的,本文也将着重和大家聊一聊这一块儿的内容,协程部分将分为三篇,本文是第一篇: