Java 코드에서 kotlin 코드 호출
소개
Kotlin 의 가장 좋은 점은 Java 상호 운용성 을 염두에 두고 설계되었다는 것입니다 . 기존 Java 코드 를 Kotlin 에서 호출할 수 있고 Kotlin 코드 도 Java 에서 호출할 수 있음을 의미 합니다. 두 가지 방법이 모두 지원됩니다.
Kotlin 코드는 Java에서 쉽게 호출할 수 있습니다. 예를 들어 Kotlin 클래스의 인스턴스는 Java 메서드에서 원활하게 생성 및 작동할 수 있지만 Java 내에서 Kotlin 코드를 호출할 때 주의해야 하는 차이점이 많습니다.
Android에서 kotlin 을 사용하는 경우 Java 로 만든 모든 API에 문제 없이 계속 액세스할 수 있습니다 .
Java에서 Kotlin 코드를 어떻게 호출할 수 있습니까?
JVM 요소 로 컴파일된 Kotlin 코드 이므로 Java 코드에서 매우 쉽게 액세스할 수 있습니다.
하지만 kotlin 코드에 몇 가지 주석 을 추가하여 Java 코드에서 쉽게 노출되도록 할 수 있습니다.
주석은 메타데이터를 코드에 첨부하는 수단입니다.
시작하고 Intellij Idea를 열어 새 Kotlin 프로젝트 를 만들고 프로젝트에 대한 gradle 을 선택 합니다.
Java 소스 루트 를 추가하려면 기본 디렉토리를 마우스 오른쪽 버튼으로 클릭 하고 새 디렉토리 에 java를 추가하십시오 .
이제 자바에서 kotlin 코드에 쉽게 액세스할 수 있게 해주는 몇 가지 주석에 대해 알아보겠습니다.
@JvmStatic
클래스 이름 뒤에 INSTANCE 키워드 를 추가할 필요 없이 Java 코드에서 액세스할 수 있도록 kotlin 정적 필드 및 함수에 주석을 추가하는 데 사용됩니다 .
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
이것은 일반 클래스의 인스턴스 필드에 액세스하는 데 사용되며 이전 예제에서는 객체를 사용합니다.
하지만 일반 Kotlin 클래스의 필드에 액세스하는 방법에 대해 생각할 수 있습니다.
답은 @JvmField 주석을 사용하는 것입니다.
코드로 이동하기 전에 Kotlin 필드 또는 속성이 어떻게 컴파일되는지 설명하겠습니다.
Kotlin 속성은 다음 Java 요소로 컴파일됩니다.
get접두사 를 추가하여 계산된 이름이 있는 getter 메서드set접두사 를 추가하여 계산된 이름이 있는 setter 메서드 (var속성에만 해당).
var firstName: String
이 줄은 다음과 같이 컴파일됩니다.
private String firstName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
new ClassName().getFirstName();
Kotlin 컴파일러가 getter 및 setter를 생성하지 않고 필드로 노출하도록 지시하기 @JvmField위해 필드 를 사용 했습니다.name
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
);
}
이 주석은 JVM에 특정 이름을 함수에 연결하도록 지시하며 이는 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()
);
}
}
일반적으로 기본 매개변수 값으로 Kotlin 함수를 작성하면 모든 매개변수가 있는 전체 서명으로만 Java에서 표시됩니다. 여러 오버로드를 Java 호출자에게 노출하려는 경우 주석 을 사용할 수 있습니다 .@JvmOverloads
주석은 생성자, 정적 메서드 등에 대해서도 작동합니다. 인터페이스에 정의된 메서드를 포함하여 추상 메서드에는 사용할 수 없습니다.
따라서 이 주석은 기본 매개변수를 나타내기 위해 사용되므로 자바 코드에서 이를 건너뛸 수 있습니다. 이것이 없으면 모든 매개변수를 전달해야 합니다.
이것은 클래스 생성자에 적용됩니다.
코틀린:
@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()
);
}
그의 블로그에서 영감을 얻은 이 주제
그의 블로그를 확인하십시오.https://amitshekhar.me
참조:
https://kotlinlang.org/docs/java-to-kotlin-interop.html
https://amitshekhar.me

![연결된 목록이란 무엇입니까? [1 부]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































