随笔分类 -  kotlin基础

摘要:硬关键字:始终解释为关键字,不能用作标识符 as — 用于类型转换 — 为导入指定一个别名 as? 用于安全类型转换 break 终止循环的执行 class 声明一个类 continue 继续最近层循环的下一步 do 开始一个 do/while 循环(后置条件的循环) else 定义一个 if 表达 阅读全文
posted @ 2022-01-28 03:44 王世桢 阅读(390) 评论(0) 推荐(0) 编辑
摘要:1.3.70 中引入了 @RequireOptIn 与 @OptIn 注解以取代先前使用的 @Experimental 与 @UseExperimental;同时 -Xopt-in 编译器选项也取代了 -Xuse-experimental。 Kotlin 标准库提供了一种机制,用于要求并明确同意使用 阅读全文
posted @ 2022-01-28 02:57 王世桢 阅读(237) 评论(0) 推荐(0) 编辑
摘要:通过使用命名得当的函数作为构建器,结合带有接收者的函数字面值,可以在 Kotlin 中创建类型安全、静态类型 的构建器 类型安全的构建器可以创建基于 Kotlin 的适用于采用半声明方式构建复杂层次数据结构领域专用语言(DSL)。 以下是构建器的一些示例应用场景: — 使用 Kotlin 代码生成标 阅读全文
posted @ 2022-01-28 02:27 王世桢 阅读(95) 评论(0) 推荐(0) 编辑
摘要:作用域函数 Kotlin 标准库包含几个函数,它们的唯一目的是在对象的上下文中执行代码块。当对一个对象调用这样的函数 并提供一个 lambda 表达式时,它会形成一个临时作用域。在此作用域中,可以访问该对象而无需其名称。这些 函数称为作用域函数。共有以下五种:let 、run 、with 、appl 阅读全文
posted @ 2022-01-27 06:14 王世桢 阅读(78) 评论(0) 推荐(0) 编辑
摘要:类引用 最基本的反射功能是获取 Kotlin 类的运行时引用。要获取对静态已知的 Kotlin 类的引用,可以使用 类字面值 语法 val c = MyClass::class 请注意,Kotlin 类引用与 Java 类引用不同。要获得 Java 类引用,请在 KClass 实例上使用 .java 阅读全文
posted @ 2022-01-27 05:39 王世桢 阅读(116) 评论(0) 推荐(0) 编辑
摘要:注解声明 注解是将元数据附加到代码的方法。要声明注解,请将 annotation 修饰符放在类的前面 annotation class Fancy 注解的附加属性可以通过用元注解标注注解类来指定 — @Target指定可以用该注解标注的元素的可能的类型(类、函数、属性、表达式等); — @Reten 阅读全文
posted @ 2022-01-27 05:05 王世桢 阅读(130) 评论(0) 推荐(0) 编辑
摘要:异常类 Kotlin 中所有异常类都是 Throwable 类的子孙类。每个异常都有消息、堆栈回溯信息以及可选的原因 使用 throw-表达式来抛出异常 throw Exception("Hi There!") 使用 try-表达式来捕获异常: try { // 一些代码 } catch (e: S 阅读全文
posted @ 2022-01-27 04:37 王世桢 阅读(86) 评论(0) 推荐(0) 编辑
摘要:可空类型与非空类型 Kotlin 的类型系统旨在从我们的代码中消除 NullPointerException 。NPE 的唯一可能的原因可能是: — 显式调用 throw NullPointerException() — 使用了下文描述的 !! 操作符 — 有些数据在初始化时不一致,例如当 — 传递 阅读全文
posted @ 2022-01-27 04:25 王世桢 阅读(68) 评论(0) 推荐(0) 编辑
摘要:Kotlin允许我们为自己的类型提供预定义的一组操作符的实现。这些操作符具有固定的符号表示(如 + 或 *) 和固定的优先级。为实现这样的操作符,我们为相应的类型(即二元操作符左侧的类型和一元操作符的参数类 型)提供了一个固定名字的成员函数或扩展函数。重载操作符的函数需要用 operator 修饰符 阅读全文
posted @ 2022-01-27 03:55 王世桢 阅读(96) 评论(0) 推荐(0) 编辑
摘要:Kotlin 中有两种类型的相等性: — 结构相等(用 equals() 检测); — 引用相等(两个引用指向同一对象)。 结构相等 结构相等由 ==(以及其否定形式 !=)操作判断。按照惯例,像 a == b 这样的表达式会翻译成: a?.equals(b) ?: (b null) 也就是说如果 阅读全文
posted @ 2022-01-27 03:01 王世桢 阅读(69) 评论(0) 推荐(0) 编辑
摘要:This表达式 为了表示当前的 接收者 我们使用 this 表达式: — 在类的成员中,this指的是该类的当前对象。 — 在扩展函数或者带有接收者的函数字面值中,this 表示在点左侧传递的 接收者 参数。 如果 this 没有限定符,它指的是最内层的包含它的作用域。要引用其他作用域中的 this 阅读全文
posted @ 2022-01-27 02:55 王世桢 阅读(77) 评论(0) 推荐(0) 编辑
摘要:is 与 !is 操作符 我们可以在运行时通过使用 is 操作符或其否定形式 !is 来检测对象是否符合给定类型: if (obj is String) { print(obj.length) } if (obj !is String) { // 与 !(obj is String) 相同 prin 阅读全文
posted @ 2022-01-18 11:23 王世桢 阅读(450) 评论(0) 推荐(0) 编辑
摘要:解构声明 有时把一个对象 解构 成很多变量会很方便,例如: val (name, age) = person 这种语法称为 解构声明 。一个解构声明同时创建多个变量。我们已经声明了两个新变量:name 和 age ,并且 可以独立使用它们 println(name) println(age) 一个解 阅读全文
posted @ 2022-01-18 10:42 王世桢 阅读(92) 评论(0) 推荐(0) 编辑
摘要:select 表达式(实验性的) select 表达式可以同时等待多个挂起函数,并 选择 第⼀个可⽤的。 在通道中 select 我们现在有两个字符串⽣产者:fizz 和 buzz 。其中 fizz 每 300 毫秒⽣成⼀个“Fizz”字符串: fun CoroutineScope.fizz() = 阅读全文
posted @ 2021-03-24 14:01 王世桢 阅读(116) 评论(0) 推荐(0) 编辑
摘要:共享的可变状态与并发 协程可⽤多线程调度器(⽐如默认的 Dispatchers.Default)并发执⾏。这样就可以提出所有常⻅的并发 问题。主要的问题是同步访问共享的可变状态。协程领域对这个问题的⼀些解决⽅案类似于多线程领域 中的解决⽅案,但其它解决⽅案则是独⼀⽆⼆的。 问题 我们启动⼀百个协程, 阅读全文
posted @ 2021-03-24 13:53 王世桢 阅读(145) 评论(0) 推荐(0) 编辑
摘要:异常处理 本节内容涵盖了异常处理与在异常上取消。我们已经知道取消协程会在挂起点抛出 CancellationException 并且它会被协程的机制所忽略。在这⾥我们会看看在取消过程中抛出异常或同 ⼀个协程的多个⼦协程抛出异常时会发⽣什么。 异常的传播 协程构建器有两种形式:⾃动传播异常(launc 阅读全文
posted @ 2021-03-24 13:40 王世桢 阅读(104) 评论(0) 推荐(0) 编辑
摘要:通道:延期的值提供了⼀种便捷的⽅法使单个值在多个协程之间进⾏相互传输。通道提供了⼀种在流中传输 值的⽅法。 通道基础: ⼀个 Channel 是⼀个和 BlockingQueue ⾮常相似的概念。其中⼀个不同是它代替了阻塞的 put 操 作并提供了挂起的 send,还替代了阻塞的 take 操作并提 阅读全文
posted @ 2021-03-17 23:00 王世桢 阅读(284) 评论(0) 推荐(0) 编辑
摘要:异步流 挂起函数可以异步的返回单个值,但是该如何异步返回多个计算好的值呢?这正是 Kotlin 流(Flow)的 ⽤武之地。 表示多个值 在 Kotlin 中可以使⽤集合来表⽰多个值。⽐如说,我们可以拥有⼀个函数 foo() ,它返回⼀个包含三 个数字的 List,然后使⽤ forEach 打印它们 阅读全文
posted @ 2021-03-17 21:47 王世桢 阅读(572) 评论(0) 推荐(1) 编辑
摘要:协程上下⽂与调度器 协程总是运⾏在⼀些以 CoroutineContext 类型为代表的上下⽂中,它们被定义在了 Kotlin 的标准库 ⾥。 协程上下⽂是各种不同元素的集合。其中主元素是协程中的 Job,我们在前⾯的⽂档中⻅过它以及它的 调度器,⽽本⽂将对它进⾏介绍。 调度器与线程 协程上下⽂包含 阅读全文
posted @ 2021-03-17 17:39 王世桢 阅读(585) 评论(0) 推荐(0) 编辑
摘要:默认顺序调用 假设我们在不同的地⽅定义了两个进⾏某种调⽤远程服务或者进⾏计算的挂起函数。我们只假设它们都是有⽤的,但是实际上它们在这个⽰例中只是为了该⽬的⽽延迟了⼀秒钟: suspend fun doSomethingUsefulOne(): Int { delay(1000L) // 假设我们在这 阅读全文
posted @ 2021-03-17 16:23 王世桢 阅读(543) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示