Kotlin方法接受内联类作为参数-如何从Java访问?

时间:2019-01-17 15:51:03

标签: java kotlin kotlin-inline-class kotlin-java-interop

假设我有:

inline class Email(value: String)

fun something(email: Email)

现在,如果我想从Java调用something(),就可以了。因为任何接受内联类作为参数的方法都是“被缠住的”(有关此内容,请参见https://kotlinlang.org/docs/reference/inline-classes.html#mangling)据我了解,改型将方法名称重命名为包含“-”,这是Java中的无效字符,因此该方法实际上从Java角度是不可见的。这可能是出于强类型安全性的目的。但是我确实需要使该方法可从Java和Kotlin调用。您知道一些解决方法吗?

1 个答案:

答案 0 :(得分:5)

According to the KEEP用于讨论和计划内联类,目前尚无法实现(从1.3.11开始编写):

  

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

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