Memanggil Kode kotlin dari Kode 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 untukvarproperti).
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

![Apa itu Linked List? [Bagian 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































