Kotlin-Code aus Java-Code aufrufen

Dec 18 2022
Einführung Das Beste an Kotlin ist, dass es auf Java-Interoperabilität ausgelegt ist. Das bedeutet, dass der vorhandene Java-Code von Kotlin aus aufgerufen werden kann und auch der Kotlin-Code von Java aus aufgerufen werden kann.

Einleitung

Das Beste an Kotlin ist, dass es auf Java-Interoperabilität ausgelegt ist . Das bedeutet, dass der vorhandene Java-Code von Kotlin aus aufgerufen werden kann und dass auch der Kotlin-Code von Java aus aufgerufen werden kann . Beide Wege werden unterstützt.

Kotlin-Code kann einfach aus Java aufgerufen werden. Beispielsweise können Instanzen einer Kotlin-Klasse nahtlos in Java-Methoden erstellt und betrieben werden. Es gibt jedoch viele Unterschiede, die beim Aufrufen von Kotlin -Code in Java beachtet werden müssen.

Wenn Sie in Android kotlin verwenden , können Sie weiterhin problemlos auf alle mit Java erstellten APIs zugreifen .

Wie können Sie Kotlin Code aus Java aufrufen?

Kotlin-Code kompiliert zu JVM-Elementen , daher sehr einfach über Java-Code darauf zuzugreifen.

Sie können Ihrem Kotlin-Code jedoch einige Anmerkungen hinzufügen, um ihn einfacher aus Java-Code verfügbar zu machen.

Anmerkungen sind Mittel zum Anhängen von Metadaten an Code.

Beginnen wir, öffnen Sie Intellij Idea, erstellen Sie ein neues Kotlin-Projekt und wählen Sie Gradle für das Projekt aus.

Wenn Sie Java-Quellen hinzufügen möchten, klicken Sie mit der rechten Maustaste auf das Hauptverzeichnis und das neue Verzeichnis fügen Sie Java hinzu.

und jetzt lernen Sie einige Anmerkungen kennen, die den Zugriff auf Kotlin-Code von Java aus erleichtern

@JvmStatic

Dies wurde verwendet, um statische Kotlin-Felder und -Funktionen zu kommentieren, sodass Sie über Java-Code darauf zugreifen können, ohne das Schlüsselwort INSTANCE nach dem Klassennamen hinzufügen zu müssen.

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

Dies wurde verwendet, um auf Instanzfelder in der normalen Klasse zuzugreifen. Wir verwenden Objekt im vorherigen Beispiel.

Sie können jedoch darüber nachdenken, wie Sie auf Felder in normalen Kotlin-Klassen zugreifen können

Die Antwort verwendet die Annotation @JvmField

Lassen Sie uns vor dem Sprung zum Code erklären, wie Kotlin-Felder oder -Eigenschaften kompiliert werden?

Eine Kotlin-Eigenschaft wird zu den folgenden Java-Elementen kompiliert:

  • eine Getter-Methode, bei der der Name durch Voranstellen des getPräfixes berechnet wird
  • eine Setter-Methode, bei der der Name durch Voranstellen des setPräfixes berechnet wird (nur für varEigenschaften).

var firstName: String

diese Zeile von kompiliert zu folgendem:

private String firstName;

public String getFirstName() {
    return firstName;
}

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

new ClassName().getFirstName();

Beachten Sie, dass wir @JvmFieldover the field verwendet haben, um nameden Kotlin-Compiler anzuweisen, keine Getter und Setter für dasselbe zu generieren und es als Feld verfügbar zu machen

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
        );
    }

Diese Anmerkung weist JVM an, Ihrer Funktion einen bestimmten Namen zuzuordnen. Dadurch wird der Funktionsname des Kotlin-Codes überschrieben.

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()
        );
    }
}

Wenn Sie eine Kotlin-Funktion mit Standardparameterwerten schreiben, ist sie normalerweise in Java nur als vollständige Signatur mit allen vorhandenen Parametern sichtbar. Wenn Sie Java-Aufrufern mehrere Überladungen anzeigen möchten, können Sie die Anmerkung verwenden.@JvmOverloads

Die Annotation funktioniert auch für Konstruktoren, statische Methoden usw. Es kann nicht für abstrakte Methoden verwendet werden, einschließlich Methoden, die in Schnittstellen definiert sind.

Diese Anmerkung wird also verwendet, um Standardparameter anzugeben, damit sie vom Java-Code übersprungen werden können, ohne dass Sie alle Parameter übergeben müssen.

dies gilt für Klassenkonstruktoren.

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()
        );
    }

dieses Thema inspiriert von seinen Blogs

überprüfen Sie seine Blogs:https://amitshekhar.me

Verweise:

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

https://amitshekhar.me