JvmStatic, JvmOverloads y JvmField en Kotlin

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *