'Kotlin methods accepting inline classes as parameters - how access from Java?
Let's say I have:
inline class Email(value: String)
and
fun something(email: Email)
now if I want to call something()
from Java I can't. Because any method that is accepting an inline class as a parameter is "mangled" (more about this here: https://kotlinlang.org/docs/reference/inline-classes.html#mangling) As far as I understood mangling renames the method name to include a "-" that's an invalid character in Java, so the method is practically invisible from Java perspective. That's intentional probably because of strong type safety. But I really need to make the method callable from both Java and Kotlin. Do you know some workaround?
Solution 1:[1]
According to the KEEP that is used to discuss and plan inline classes, this is not currently possible (writing as of 1.3.11):
We'll compile function
compute(UInt)
tocompile-<hash>(Int)
, where<hash>
is a mangling suffix for the signature. Now it will not possible to call this function from Java because - is an illegal symbol there, but from Kotlin point of view it's a usual function with the name compute. [Emphasis mine]
Keep in mind that inline classes are experimental and subject to change, so perhaps in a future release this will be possible. I did try annotating this with @JvmName and that is also not supported.
Solution 2:[2]
Please, manually disable Kotlin names mangling with @JvmName
@JvmName("something")
fun something(email: Email)
See docs for more details
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Todd |
Solution 2 | sanya5791 |