6

假设我有:

inline class Email(value: String)

fun something(email: Email)

现在,如果我想something()从 Java 打电话,我不能。因为任何接受内联类作为参数的方法都是“损坏的”(有关此的更多信息:https ://kotlinlang.org/docs/reference/inline-classes.html#mangling )据我所知,修饰重命名方法名称中包含一个“-”,它在 Java 中是一个无效字符,因此从 Java 的角度来看,该方法实际上是不可见的。这是故意的,可能是因为强大的类型安全性。但我真的需要让 Java 和 Kotlin 都可以调用该方法。你知道一些解决方法吗?

4

1 回答 1

6

根据用于讨论和计划内联类的 KEEP,目前这是不可能的(从 1.3.11 开始编写):

我们将函数编译compute(UInt)compile-<hash>(Int),其中<hash>是签名的修饰后缀。现在不可能从 Java 调用这个函数,因为 - 在那里是一个非法符号,但从 Kotlin 的角度来看,它是一个名为 compute 的常用函数。[强调我的]

请记住,内联类是实验性的并且可能会发生变化,所以也许在未来的版本中这将是可能的。我确实尝试使用 @JvmName 对此进行注释,但也不支持。

于 2019-01-17T16:31:01.617 回答