Memanggil Kode kotlin dari Kode Java

Dec 18 2022
Intro Hal terbaik tentang Kotlin adalah ia dirancang dengan mempertimbangkan interoperabilitas Java. Artinya kode Java yang ada dapat dipanggil dari Kotlin, dan juga kode Kotlin dapat dipanggil dari Java.

Pendahuluan

Hal terbaik tentang Kotlin adalah ia dirancang dengan mempertimbangkan interoperabilitas Java . Artinya kode Java yang ada dapat dipanggil dari Kotlin , dan kode Kotlin juga dapat dipanggil dari Java . Kedua cara didukung.

Kode Kotlin dapat dengan mudah dipanggil dari Java. Misalnya, instance kelas Kotlin dapat dibuat dan dioperasikan dengan mulus dalam metode Java. Namun, ada banyak perbedaan yang memerlukan perhatian saat memanggil kode kotlin di dalam Java.

di Android jika Anda menggunakan kotlin Anda masih dapat mengakses semua API yang dibuat dengan Java tanpa masalah.

Bagaimana Anda bisa memanggil Kode Kotlin dari Java?

Kode Kotlin dikompilasi menjadi elemen JVM , sehingga sangat mudah untuk mengaksesnya dari kode java.

tetapi Anda dapat menambahkan beberapa anotasi ke kode kotlin Anda agar lebih mudah diekspos dari kode java.

Anotasi adalah cara melampirkan metadata ke kode.

mari kita mulai, buka Ide Intellij buat proyek Kotlin baru , pilih gradle untuk proyek.

jika Anda ingin menambahkan root sumber java klik kanan pada direktori utama dan Direktori baru tambahkan java.

dan sekarang mari kita mulai belajar tentang beberapa anotasi yang memudahkan untuk mengakses kode kotlin dari java

@JvmStatic

ini digunakan untuk memberi anotasi bidang dan fungsi statis kotlin sehingga Anda dapat mengaksesnya dari kode java tanpa perlu menambahkan kata kunci INSTANCE setelah nama kelas.

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

ini digunakan untuk mengakses bidang instance di kelas normal, kami menggunakan objek di contoh sebelumnya.

tetapi Anda mungkin berpikir tentang cara mengakses bidang pada kelas Kotlin normal

jawabannya menggunakan anotasi @JvmField

sebelum lompat ke kode, mari kita jelaskan bagaimana bidang atau properti kotlin dikompilasi?

Properti Kotlin dikompilasi ke elemen Java berikut:

  • metode pengambil, dengan nama yang dihitung dengan menambahkan getawalan
  • metode penyetel, dengan nama yang dihitung dengan menambahkan setawalan (hanya untuk varproperti).

var firstName: String

baris ini dikompilasi menjadi berikut:

private String firstName;

public String getFirstName() {
    return firstName;
}

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

new ClassName().getFirstName();

Perhatikan bahwa kita telah menggunakan @JvmFieldbidang tersebut nameuntuk menginstruksikan kompiler Kotlin agar tidak membuat pengambil dan penyetel apa pun untuk hal yang sama dan menampilkannya sebagai bidang

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

anotasi ini memberi tahu JVM untuk mengaitkan nama tertentu dengan fungsi Anda, ini akan menggantikan nama fungsi kode 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()
        );
    }
}

Biasanya, jika Anda menulis fungsi Kotlin dengan nilai parameter default, fungsi tersebut hanya akan terlihat di Java sebagai tanda tangan lengkap, dengan semua parameter yang ada. Jika Anda ingin mengekspos banyak kelebihan ke pemanggil Java, Anda dapat menggunakan anotasi.@JvmOverloads

Anotasi juga berfungsi untuk konstruktor, metode statis, dan sebagainya. Itu tidak dapat digunakan pada metode abstrak, termasuk metode yang didefinisikan dalam antarmuka.

jadi anotasi ini digunakan untuk menunjukkan parameter default sehingga dapat melewatinya dari kode java, tanpa ini Anda harus melewati semua parameter.

ini berlaku untuk konstruktor kelas.

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

topik ini terinspirasi oleh blog-nya

cek blognya :https://amitshekhar.me

referensi:

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

https://amitshekhar.me