【发布时间】:2020-09-01 12:48:34
【问题描述】:
最近我将我的 KMP 项目拆分为全栈项目和一个核心库(主要由常见的数据类组成),并发现我需要在现在定义的数据类之一上使用 JVM 库中的注释在一个公共模块中。
似乎无法在 Kotlin 通用代码中使用 Java 库中的注解。
有哪些可能的方法来解决此类问题,最好避免通过 expect 声明此类数据类,然后在 actual 平台上重复其实现但使用不同的注释?
【问题讨论】:
最近我将我的 KMP 项目拆分为全栈项目和一个核心库(主要由常见的数据类组成),并发现我需要在现在定义的数据类之一上使用 JVM 库中的注释在一个公共模块中。
似乎无法在 Kotlin 通用代码中使用 Java 库中的注解。
有哪些可能的方法来解决此类问题,最好避免通过 expect 声明此类数据类,然后在 actual 平台上重复其实现但使用不同的注释?
【问题讨论】:
你可以expect/actual自己的注解。
说,如果你有这样的 JVM 注释,@Entity
你可以拥有像src/commonMain/Entity.kt这样的文件
expect annotation class Entity()
在src/androidMain/Entity.kt
actual typealias Entity = package.to.Entity
在src/iosMain/Entity.kt
actual annotation class Entity()
现在你可以继续在你的公共代码中使用它
@Entity
data class Movies(
val title: String,
val release: Int
)
【讨论】:
typealias 不会简单地做到这一点?