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
在 JTypeName
和 KTypeName
之间转换
这些的大多数用法都可以通过 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
包中的内建类型,例如基本类型、List
、String
、IntArray
等。在可能的情况下,互操作将尽力尝试在从 Java 类型转换时转换为符合 Kotlin 习惯的类型。
有损转换¶
在某些方面,Kotlin 拥有更富有表达力的类型。这些类型无法在 JavaPoet 中简单地表达,因此会进行有损转换。
示例包括
- 可空性
- Kotlin 中的可空类型在 JavaPoet 中将显示为普通类型。
- 集合可变性
- 不可变 Kotlin 集合将转换为其标准的(可变的)Java 对应物。
- Java 集合将转换为 不可变 的 Kotlin 对应物,在生成的公共 API 中倾向于更安全的做法。
- 无符号类型