网站首页 > 技术文章 正文
英文原文: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怎么样)
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)