En este artículo, veremos cómo utilizar el código Kotlin en nuestro código Java actual usando @JvmStatic, @JvmOverloads y @JvmField en Kotlin. Puede invocar código Kotlin desde código Java y viceversa. Este blog se concentrará en invocar código Kotlin desde código Java.
Kotlin
// Kotlin Class class GeeksforGeeks // Calling from Kotlin val article = Article()
Java
// Class in Java being called Article geeksforgeeks = new Article();
Como puede ver en el código anterior, llamar al código Kotlin desde el código Java es bastante sencillo, pero hay momentos en los que no lo es. En esos casos, utilizamos @JvmStatic, @JvmOverloads y @JvmField en Kotlin para que sea sencillo para alguien llamar al código de Kotlin desde Java.
@JvmStatic
Las funciones a nivel de paquete se representan como métodos estáticos en Kotlin. También puede usar la anotación @JvmStatic en Kotlin para crear métodos estáticos para funciones especificadas en un objeto complementario o un objeto con nombre. Como ejemplo:
Kotlin
object GeeksforGeeks { fun useSomeLogic() { // your code goes here } }
Llamemos a Kotlin ahora:
Kotlin
GeeksforGeeks.useSomeLogic()
Deberá realizar una llamada como esta desde Java.
Java
GeeksforGeeks.INSTANCE.useSomeLogic();
¿Cómo podemos hacer que funcione si no usamos la INSTANCIA?
JvmStatic es la respuesta.
Kotlin
object GeeksforGeeks { @JvmStatic fun useSomeLogic() { // logic goes here } }
Java
GeeksforGeeks.useSomeLogic();
Si no proporciona una fecha en el argumento, la fecha actual se utilizará de forma predeterminada en el código anterior. Entonces, si llamamos desde Kotlin, el siguiente código se ejecutará sin error:
Kotlin
val articleOne = Event("GeeksforGeeks") val articleTwo = Event("Android", Date())
Sin embargo, si llamamos a la misma función desde Java, debemos proporcionar todos los argumentos, o recibiríamos el siguiente error:
Java
Article articleOne = new Event("GeeksforGeeks"); Article articleTwo = new Event("GeeksforGeeks", new Date());
Hemos pasado ambos argumentos. Entonces, ¿cuál es el punto de usar el valor predeterminado si tenemos que pasar ambos valores?
Entonces, podemos usar la anotación @JvmOverloads para utilizar el valor predeterminado. Siguiendo el uso de la anotación, el código Kotlin será:
data class GeeksforGeeks @JvmOverloads constructor( val articleName: String, val date: Date = Date())
@JvmField
Usemos la clase Event de la sección anterior del artículo como ejemplo.
data class GeeksforGeeks ( val articleName: String, val date: Date = Date())
Por lo tanto, si desea que un determinado campo se utilice como un campo normal en lugar de un captador o definidor, debe indicar al compilador que no produzca ningún captador o definidor para él, lo que puede lograr utilizando la anotación @JvmField. Entonces, después de aplicar la anotación @JvmField, el código de Kotlin será:
data class Article (@JvmField val geeksforgeeks: String, val date: Date = Date())
Ahora, en Java, puede acceder a los campos de la clase de la misma manera que en Kotlin:
Java
Article newArticle = new Event("GeeksforGeeks", new Date()); String articleName = newArticle.name;
Publicación traducida automáticamente
Artículo escrito por therebootedcoder y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA