跳到内容

KotlinPoet 的 JavaPoet 扩展

interop:javapoet 是一个互操作 API,用于将 JavaPoet 类型转换为 KotlinPoet 类型。这对于支持多种语言的代码生成项目并且想要轻松切换非常有用。

请注意,此 API 目前处于预览阶段,可能会发生 API 更改。使用它们需要选择加入(opt in)@KotlinPoetJavaPoetPreview 注解。

示例

用于常见冲突类型名称的类型别名

// Points to com.squareup.kotlinpoet.TypeName
KTypeName
// Points to com.squareup.javapoet.TypeName
JTypeName

JTypeNameKTypeName 之间转换

这些的大多数用法都可以通过 toKTypeName()toJTypeName() 扩展来完成。

val jType = JTypeName.get("com.example", "Taco")

// Returns a KotlinPoet `ClassName` of value `com.example.Taco`
val kType = jType.toKTypeName()

// Returns a JavaPoet `ClassName` of value `com.example.Taco`
val jType2 = kType.toJTypeName()

内建类型

Kotlin 支持许多位于 kotlin 包中的内建类型,例如基本类型、ListStringIntArray 等。在可能的情况下,互操作将尽力尝试在从 Java 类型转换时转换为符合 Kotlin 习惯的类型。

有损转换

在某些方面,Kotlin 拥有更富有表达力的类型。这些类型无法在 JavaPoet 中简单地表达,因此会进行有损转换。

示例包括

  • 可空性
  • Kotlin 中的可空类型在 JavaPoet 中将显示为普通类型。
  • 集合可变性
  • 不可变 Kotlin 集合将转换为其标准的(可变的)Java 对应物。
  • Java 集合将转换为 不可变 的 Kotlin 对应物,在生成的公共 API 中倾向于更安全的做法。
  • 无符号类型