Wywoływanie kodu kotlin z kodu Java
Wprowadzenie
Najlepszą rzeczą w Kotlinie jest to, że został zaprojektowany z myślą o interoperacyjności z Javą . Oznacza to, że istniejący kod Java może być wywoływany z Kotlina , a także kod Kotlina może być wywoływany z Javy . Obsługiwane są oba sposoby.
Kod Kotlina można łatwo wywołać z Javy. Na przykład instancje klasy Kotlin mogą być bezproblemowo tworzone i obsługiwane w metodach Java. Istnieje jednak wiele różnic, które wymagają uwagi podczas wywoływania kodu Kotlin w Javie .
w Androidzie, jeśli używasz kotlina , nadal możesz bez problemu uzyskać dostęp do wszystkich interfejsów API utworzonych w Javie .
Jak możesz wywołać Kotlin Code z Javy?
Kod Kotlina skompilowany do elementów JVM , dzięki czemu bardzo łatwo uzyskać do niego dostęp z kodu Java.
ale możesz dodać kilka adnotacji do swojego kodu Kotlin, aby ułatwić jego ujawnienie z kodu Java.
Adnotacje to sposoby dołączania metadanych do kodu.
zacznijmy, otwórz Intellij Idea utwórz nowy projekt Kotlin , wybierz gradle dla projektu.
jeśli chcesz dodać źródła java root, kliknij prawym przyciskiem myszy główny katalog i nowy katalog dodaj java.
a teraz zacznijmy uczyć się o niektórych adnotacjach, które ułatwiają dostęp do kodu Kotlina z Javy
@JvmStatic
służy to do opisywania statycznych pól i funkcji kotlin, dzięki czemu można uzyskać do nich dostęp z kodu Java bez potrzeby dodawania słowa kluczowego INSTANCE po nazwie klasy.
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
to służyło do uzyskiwania dostępu do pól instancji w normalnej klasie, używamy obiektu w poprzednim przykładzie.
ale możesz pomyśleć o tym, jak uzyskać dostęp do pól w normalnych klasach Kotlina
odpowiedzią jest użycie adnotacji @JvmField
zanim przejdziemy do kodu, wyjaśnijmy, jak zostały skompilowane pola lub właściwości Kotlin?
Właściwość Kotlin jest kompilowana do następujących elementów Java:
- metoda pobierająca, której nazwa jest obliczana przez dodanie
getprefiksu - metoda ustawiająca, której nazwa jest obliczana przez dodanie
setprzedrostka (tylko dlavarwłaściwości).
var firstName: String
ta linia skompilowana do następujących:
private String firstName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
new ClassName().getFirstName();
Zwróć uwagę, że użyliśmy @JvmFieldover the field, nameaby poinstruować kompilator Kotlina, aby nie generował żadnego elementu pobierającego i ustawiającego dla tego samego i udostępniał go jako pole
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
);
}
ta adnotacja mówi JVM, aby skojarzyła określoną nazwę z twoją funkcją, to zastąpi nazwę funkcji kodu 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()
);
}
}
Zwykle, jeśli napiszesz funkcję Kotlina z domyślnymi wartościami parametrów, będzie ona widoczna w Javie tylko jako pełna sygnatura, ze wszystkimi obecnymi parametrami. Jeśli chcesz ujawnić wiele przeciążeń dla wywołujących Java, możesz użyć adnotacji.@JvmOverloads
Adnotacja działa również w przypadku konstruktorów, metod statycznych i tak dalej. Nie można go używać w przypadku metod abstrakcyjnych, w tym metod zdefiniowanych w interfejsach.
więc ta adnotacja służy do wskazania parametrów domyślnych, więc można je pominąć w kodzie java, bez tego musisz przekazać wszystkie parametry.
dotyczy to konstruktorów klas.
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()
);
}
ten temat inspirowany jego blogami
sprawdź jego blogi:https://amitshekhar.me
Bibliografia:
https://kotlinlang.org/docs/java-to-kotlin-interop.html
https://amitshekhar.me

![Czym w ogóle jest lista połączona? [Część 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































