Digamos que tengo:
inline class Email(value: String)
y
fun something(email: Email)
ahora, si quiero llamar a something()
desde Java, no puedo. Porque cualquier método que acepte una clase en línea como parámetro está "destrozado" (más sobre esto aquí: https://kotlinlang.org/docs/reference/inline-classes.html#mangling ) Por lo que entendí, la manipulación cambia el nombre del nombre del método para incluir un "-" que es un carácter no válido en Java, por lo que el método es prácticamente invisible desde la perspectiva de Java. Eso es intencional, probablemente debido a la fuerte seguridad del tipo. Pero realmente necesito hacer que el método se pueda llamar desde Java y Kotlin. ¿Conoces alguna solución?
De acuerdo con KEEP que se usa para discutir y planificar clases en línea, esto no es posible actualmente (escritura a partir de 1.3.11):
Compilaremos la función
compute(UInt)
paracompile-<hash>(Int)
, donde<hash>
es un sufijo manipulador para la firma. Ahora no será posible llamar a esta función desde Java porque - es un símbolo ilegal allí , pero desde el punto de vista de Kotlin es una función habitual con el nombre de cálculo. [Énfasis mío]
Tenga en cuenta que las clases en línea son experimentales y están sujetas a cambios, por lo que tal vez en una versión futura esto sea posible. Intenté anotar esto con @JvmName y eso tampoco es compatible.
Por favor, deshabilite manualmente la manipulación de nombres de Kotlin con @JvmName
@JvmName("something") fun something(email: Email)
Ver documentos para más detalles