Haoyuan's blog Haoyuan's blog
首页
导航站
  • Java基础

    • Java基础
    • Java集合
    • Java反射
    • JavaJUC
    • JavaJVM
  • Java容器

    • JavaWeb
  • Java版本新特性

    • Java新特性
  • SQL 数据库

    • MySQL
    • Oracle
  • NoSQL 数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • ActiveMQ
    • RabbitMQ
    • RocketMQ
    • Kafka
  • 进阶服务

    • Nginx
  • Spring
  • Spring Boot
  • Spring Security
  • Spring Cloud
  • 设计模式
  • 算法
  • 知识
  • 管理

    • Maven
    • Git
  • 部署

    • Linux
    • Docker
    • Jenkins
    • Kubernetes
  • 进阶

    • TypeScript
  • 框架

    • React
    • Vue2
    • Vue3
  • 轮子工具
  • 项目工程
  • 友情链接
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 关于
留言区
GitHub (opens new window)

Somnus Haoyuan

Word is cheap, show me the code.
首页
导航站
  • Java基础

    • Java基础
    • Java集合
    • Java反射
    • JavaJUC
    • JavaJVM
  • Java容器

    • JavaWeb
  • Java版本新特性

    • Java新特性
  • SQL 数据库

    • MySQL
    • Oracle
  • NoSQL 数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • ActiveMQ
    • RabbitMQ
    • RocketMQ
    • Kafka
  • 进阶服务

    • Nginx
  • Spring
  • Spring Boot
  • Spring Security
  • Spring Cloud
  • 设计模式
  • 算法
  • 知识
  • 管理

    • Maven
    • Git
  • 部署

    • Linux
    • Docker
    • Jenkins
    • Kubernetes
  • 进阶

    • TypeScript
  • 框架

    • React
    • Vue2
    • Vue3
  • 轮子工具
  • 项目工程
  • 友情链接
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 关于
留言区
GitHub (opens new window)
  • MyBatis

  • MyBatis-Plus

  • 中间件 - ActiveMQ

  • 中间件 - RabbitMQ

  • 中间件 - RocketMQ

  • 中间件 - Kafka

  • 高性能服务器 - Nginx

  • 响应式框架 - Reactor

    • Reactor - 快速上手
    • Reactor - 响应式编程
    • Reactor - 核心特征
    • Reactor - 对 Kotlin 的支持
      • 简介
      • 前提
      • 扩展
      • Null 值安全
    • Reactor - 单元测试
    • Reactor - 调试 Reactor
    • Reactor - 高级特性与概念
    • Reactor - 操作符总结
    • Reactor - 最佳实践
    • Reactor - 扩展性
  • 框架
  • 响应式框架 - Reactor
Haoyuan
2024-11-02
目录

Reactor - 对 Kotlin 的支持

  • 简介
  • 前提
  • 扩展
  • Null 值安全

# 简介

Kotlin (opens new window) 是一种运行于 JVM(及其他平台)上的静态(statically-typed)语言。 使用它可以在拥有与现有 Java 库良好 互操作性 (opens new window) 的同时编写简介优雅的代码。

本内容介绍了 Reactor 3.1 如何能够完美支持 Kotlin。

# 前提

Kotlin 支持 Kotlin 1.1+ 及依赖 kotlin-stdlib (opens new window) (或 kotlin-stdlib-jre7 (opens new window) / kotlin-stdlib-jre8 (opens new window) 之一)

# 扩展

多亏了其良好的 Java 互操作性 (opens new window) 以及 Kotlin 扩展(extensions) (opens new window), Reactor Kotlin APIs 既可使用 Java APIs,还能够收益于一些 Reactor 内置的专门支持 Kotlin 的 APIs。

注意 Kotlin 的扩展需要 import 才能够使用。所以比如 Throwable.toFlux 的 Kotlin 扩展必须在 import reactor.core.publisher.toFlux 后才可使用。多数场景下 IDE 应该能够自动给出这种类似 static import 的建议。

例如,Kotlin 参数类型推导(reified type parameters) (opens new window) 对于 JVM 的 通用类型擦除(generics type erasure) (opens new window)提供了一种变通解决方案,Reactor 就可以通过扩展(extension)来应用到这种特性。

下面是对「Reactor with Java」和「Reactor with Kotlin + extensions」的比较:

Java Kotlin + extensions
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 (opens new window) 中详细的关于 Kotlin 扩展的文档。

# Null 值安全

Kotlin的一个关键特性就是 null 值安全 (opens new window) ——从而可以在编译时处理 null 值,而不是在运行时抛出著名的 NullPointerException。 这样,通过「可能为空(nullability)」的声明,以及能够表明「有值或空值」的语法(避免使用类似 Optional 来进行包装),使得应用程序更加安全。(Kotlin允许在函数参数中使用可能为空的值, 请参考 comprehensive guide to Kotlin null-safety (opens new window))

尽管 Java 的类型系统不允许这样的 null 值安全的表达方式, Reactor 空值安全 对所有 Reactor API 通过工具友好的(tooling-friendly)注解(在 reactor.util.annotation 包中定义)来支持。 默认情况下,Java APIs 用于 Kotlin 的话会被作为 平台类型(platform types) (opens new window) 而放松对 null 的检查。 Kotlin 对 JSR 305 注解的支持 (opens new window) + Reactor 可为空(nullability)的注解,为所有 Reactor API 和 Kotlin 开发者确保「null 值安全」的特性 (在编译期处理 null 值)。

JSR 305 的检查可以通过增加 -Xjsr305 编译参数进行配置:-Xjsr305={strict|warn|ignore}。

对于 kotlin 1.1.50+,默认的配置为 -Xjsr305=warn。如果希望 Reactor API 能够全面支持 null 值安全 则需要配置为 strict。不过你可以认为这是实验性的(experimental),因为 Reactor API 「可能为空」 的声明可能甚至在小版本的发布中都会不断改进,而且将来也可能增加新的检查。

目前尚不支持通用类型参数、可变类型以及数组元素的「可为空」。不过应该包含在接下来的发布中,最新信息请看 这个 Issues (opens new window)。

编辑此页 (opens new window)
#Reactor
更新时间: 2025/04/06, 01:04:59
Reactor - 核心特征
Reactor - 单元测试

← Reactor - 核心特征 Reactor - 单元测试→

最近更新
01
技术随笔 - Element Plus 修改包名 原创
11-02
02
Reactor - 扩展性
11-02
03
Reactor - 最佳实践
11-02
更多文章>
Theme by Vdoing | Copyright © 2021-2025 Somnus Haoyuan | MIT License
京公网安备 11010802034042号 京ICP备2025120692号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式