作者:肯尼亚hanhan | 来源:互联网 | 2022-11-20 23:30
假设我有:
inline class Email(value: String)
和
fun something(email: Email)
现在,如果我想something()
从Java 打电话,就不能。因为任何将内联类作为参数接受的方法都是“混杂的”(有关此内容,请参见:https : //kotlinlang.org/docs/reference/inline-classes.html#mangling)据我了解,重整会重命名方法名称中包含“-”,这是Java中的无效字符,因此从Java角度来看,该方法实际上是不可见的。这可能是出于强类型安全性的目的。但是我确实需要使该方法可从Java和Kotlin调用。您知道一些解决方法吗?
1> Todd..:
根据用于讨论和计划内联类的KEEP,目前尚不可能(从1.3.11开始编写):
我们将函数编译compute(UInt)
为compile-(Int)
,其中
签名的后缀为。现在将无法从Java调用此函数,因为-是那里的非法符号,但从Kotlin的角度来看,它是具有名字compute的常用函数。[强调我的]
请记住,内联类是实验性的,可能会发生变化,因此也许在将来的版本中这是可能的。我确实尝试使用@JvmName对此进行注释,并且也不支持该注释。