网站首页 > 技术文章 正文
英文原文:https://projectreactor.io/docs/core/3.2.11.RELEASE/reference/index.html#kotlin GitHub:https://github.com/jijicai/ProjectReactor/tree/master/book/Reactor3
5、Kotlin 支持
5.1、介绍
Kotlin 是一种针对 JVM(和其他平台)的静态类型语言,它允许编写简洁而优雅的代码,同时提供与用 Java 编写的现有库的良好互操作性。
Reactor 3.1 引入了对 Kotlin 的一级支持,本节将对此进行描述。
5.2、要求
Reactor 支持 Kotlin 1.1+,需要 kotlin-stdlib(或其 kotlin-stdlib-jre7/kotlin-stdlib-jre8 变体之一)。
5.3、扩展
由于其出色的 Java 互操作性和 Kotlin 扩展,Reactor Kotlin APIs 利用了常规的 Java APIs,并通过 Reacotr 工件中一些开箱即用的现成的 Kotlin 特定 APIs 得到了增强。
注意:请记住,Kotlin 扩展需要导入才能使用。这意味着,例如,仅当导入 import reactor.core.publisher.toFlux 时,Throwable.toFlux Kotlin 扩展才可用。也就是说,与静态导入类似,IDE 在大多数情况下应该自动建议进行导入。
例如,Kotlin 具体化的类型参数为 JVM 泛型类型擦除提供了一种解决方案,并且 Reactor 提供了一些扩展来利用这一特性。
下面是 Java 中的Reactor 和 Kotlin + 扩展中的 Reactor 的快速比较。
Java Kotlin + 扩展 Mono.just("foo") "foo".toMono() Flux.fromIterable(list) list.toFlux() Mono.error(new RuntimeException()) RuntimeException().toMono() Flux.error(new RuntimeException()) RuntimeException().toFlux() flux.ofType(Foo.class) flux.ofType<Foo> or flux.ofType(Foo::class) StepVerifier.create(flux).verifyComplete() flux.test.verifyComplete()
Reactor KDoc API 列出并记录了所有可用的 Kotlin 扩展。
5.4、空(Null)安全
Kotlin 的关键特性之一是空安全———它在编译时干净地处理 null 值,而不是在运行时碰到著名的 NullPointerException。这使得应用程序通过可控性声明和表达“值或无值”语义而更加安全,而不必像 Optional 那样承担包装器的成本(Kotlin 允许使用带可空值的函数构造;请查看 Kotlin 空安全的综合手册)。
尽管 Java 不允许在其类型系统中表示空安全性,但是 Reactor 现在通过在 reactor.util.annotation 包中声明的工具友好的注解来提供整个 Reactor API 的空安全性。在默认情况下,Kotlin 中使用的 Java APIs 类型被认为是平台类型,对其空值检查是不严格的。Kotlin 对 JSR 305 注解 + Reactor 可控性注解的支持为 Kotlin 开发人员提供了整个 Reactor API 的空安全性,其优点是在编译时处理与空相关的问题。
可以通过添加带有以下选项的 -Xjsr305 编译器标志来配置JSR 305 检查:
对于 Kotlin 版本 1.1.50+,默认行为与 -Xjsr305=warn 相同。strict 值需要考虑到 Reactor API 的完全空安全性,并且应该考虑到是实验性的,因为 Reactor API 的可空性声明可能在较小的发布版本之间演变,并且将来可能会增加更多的检查。
注意:泛型类型参数、变量参数和数组元素的可空性还未被支持,但会在未来版本中支持,请查看有关最新信息的讨论。
猜你喜欢
- 2024-09-20 Kotlin学习日记-类属性和字段(Properties/Fields)
- 2024-09-20 大厂面试原来是这样的,这份面试经你值得拥有
- 2024-09-20 Android 开发之 Kotlin 初始篇(kotlin安卓开发教程)
- 2024-09-20 Kotlin必须要掌握的常见高阶函数(kotlin从零到精通)
- 2024-09-20 Kotlin成为Android的官配编程语言
- 2024-09-20 Room & Kotlin 符号的处理(kotlin inline crossinline)
- 2024-09-20 Kotlin - 数据类型(kotlin 函数类型)
- 2024-09-20 Duolingo 如何将 Android App 全部迁至 Kotlin
- 2024-09-20 Kotlin官方文档翻译,类和对象:属性、接口、可见性修饰
- 2024-09-20 怎样把kotlin代码写好(kotlin怎么样)
- 1514℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 563℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 508℃MySQL service启动脚本浅析(r12笔记第59天)
- 486℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 485℃启用MySQL查询缓存(mysql8.0查询缓存)
- 465℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 445℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 442℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)