Llamar al código kotlin desde el código Java

Dec 18 2022
Introducción Lo mejor de Kotlin es que está diseñado teniendo en cuenta la interoperabilidad de Java. Significa que el código Java existente se puede llamar desde Kotlin, y también el código Kotlin se puede llamar desde Java.

Introducción

Lo mejor de Kotlin es que está diseñado teniendo en cuenta la interoperabilidad de Java . Significa que el código Java existente puede llamarse desde Kotlin , y también el código Kotlin puede llamarse desde Java . Ambas formas son compatibles.

El código de Kotlin se puede llamar fácilmente desde Java. Por ejemplo, las instancias de una clase de Kotlin se pueden crear y operar sin problemas en los métodos de Java, pero hay muchas diferencias que requieren atención al llamar al código de Kotlin dentro de Java.

en Android, si usa kotlin , aún puede acceder a todas las API creadas con Java sin ningún problema.

¿Cómo puedes llamar al Código Kotlin desde Java?

Código Kotlin compilado en elementos JVM , por lo tanto, es muy fácil acceder a él desde el código Java.

pero puede agregar algunas anotaciones a su código kotlin para que sea más fácil exponerlo desde el código java.

Las anotaciones son medios para adjuntar metadatos al código.

Comencemos, abra Intellij Idea, cree un nuevo proyecto Kotlin , seleccione gradle para el proyecto.

si desea agregar la raíz de fuentes java, haga clic con el botón derecho en el directorio principal y el nuevo Directorio agregue java.

y ahora comencemos a aprender sobre algunas anotaciones que facilitan el acceso al código kotlin desde java

@JvmStatic

esto solía anotar los campos y funciones estáticos de kotlin para que pueda acceder a ellos desde el código Java sin necesidad de agregar la palabra clave INSTANCE después del nombre de la clase.

public object  User{


    @JvmStatic     //use this 
 public   fun getUserName():String="Kururu"
}

public class JavaCode {

    public static void main(String[] args) {
        System.out.println(User.getUserName());  // without INSTANCE KEYWORD

//        System.out.println(new Employee()
//                .getEmployeeName());
    }
}

public object  User{

@JvmStatic
var name:String ="Kururu"
}

@JvmField

esto se usa para acceder a los campos de instancia en la clase normal, usamos el objeto en el ejemplo anterior.

pero puede pensar en cómo acceder a los campos en las clases normales de Kotlin

la respuesta está usando la anotación @JvmField

antes de saltar al código, expliquemos cómo se compilan los campos o las propiedades de kotlin.

Una propiedad de Kotlin se compila en los siguientes elementos de Java:

  • un método getter, con el nombre calculado anteponiendo el getprefijo
  • un método setter, con el nombre calculado anteponiendo el setprefijo (solo para varpropiedades).

var firstName: String

esta línea de compilado a continuación:

private String firstName;

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

new ClassName().getFirstName();

Tenga en cuenta que hemos utilizado @JvmFieldsobre el campo namepara indicar al compilador de Kotlin que no genere ningún getter y setter para el mismo y lo exponga como un campo.

class Employee{

    @JvmField    //from java code you can access  firstName
 var firstName:String="Kururu"

}

public static void main(String[] args) {

        
        System.out.println(new  Employee().firstName
        );
    }

esta anotación le dice a JVM que asocie un nombre específico a su función, esto anulará el nombre de la función del código kotlin.

kotlin :

@JvmName("getEmployeeName")
fun getEmpName():String{
    return "Abdo";
}

public class JavaCode {

    public static void main(String[] args) {
//        System.out.println(User.getMyUserName());

        System.out.println(new  Employee().getEmployeeName()
        );
    }
}

Normalmente, si escribe una función de Kotlin con valores de parámetros predeterminados, será visible en Java solo como una firma completa, con todos los parámetros presentes. Si desea exponer múltiples sobrecargas a los llamantes de Java, puede usar la anotación.@JvmOverloads

La anotación también funciona para constructores, métodos estáticos, etc. No se puede usar en métodos abstractos, incluidos los métodos definidos en las interfaces.

por lo tanto, esta anotación se usa para indicar los parámetros predeterminados, por lo que puede omitirlos del código Java, sin esto, debe pasar todos los parámetros.

esto se aplica a los constructores de clases.

Kotlin:

@JvmOverloads fun getEmpName( name:String="abdo"):String{
     return "Abdo";
 }

public static void main(String[] args) {
//        System.out.println(User.getMyUserName());


//access getEmpName()  without need to pass   NAME argument
        System.out.println(new  Employee().getEmployeeName()
        );
    }

este tema inspirado en sus blogs

revisa sus blogs:https://amitshekhar.me

referencias:

https://kotlinlang.org/docs/java-to-kotlin-interop.html

https://amitshekhar.me