Kotlin의 JvmOverloads 주석

5052 단어 kotlinandroid
저는 Amit Shekhar , 개발자들이 고임금 기술직을 구하도록 돕는 멘토입니다.

이번 블로그에서는 Kotlin의 JvmOverloads 애노테이션에 대해 알아보도록 하겠습니다.

이 문서는 원래 amitshekhar.me에 게시되었습니다.

Kotlin의 가장 좋은 점은 Java 상호 운용성을 염두에 두고 설계되었다는 것입니다. 기존 Java 코드를 Kotlin에서 호출할 수 있고 Kotlin 코드도 Java에서 호출할 수 있음을 의미합니다. 두 가지 방법이 모두 지원됩니다.

오늘은 JvmOverloads 어노테이션에 대해 알아보고자 하여 Java에서 Kotlin 코드를 호출하는 데 중점을 둘 것입니다.

이것을 배우는 가장 좋은 방법은 예를 들어보는 것입니다.

아래와 같이 Kotlin에 data 클래스Session가 있다고 가정합니다.

data class Session(val name: String, val date: Date = Date())


아래와 같이 Kotlin에서 객체를 생성할 수 있습니다.

val sessionOne = Session("Session One", Date())
val sessionTwo = Session("Session Two")


코드의 두 줄은 두 번째 개체에 대해 예상대로 컴파일되며 기본값은 Date 입니다.

그러나 아래와 같이 Java에서 객체를 생성할 때:

Session sessionOne = new Session("Session One", new Date());
Session sessionTwo = new Session("Session Two"); // compilation error


첫 번째 줄은 컴파일되지만 두 번째 줄은 매개변수로 전달하지 않았기 때문에 컴파일되지 않습니다Data. 다음과 같은 오류가 발생합니다.

Session(java.lang.String, java.util.Date)' in 'com.example.Session' cannot be applied to '(java.lang.String)


Java는 기본 매개변수를 지원하지 않는다는 것을 알고 있습니다. 과부하를 지원합니다.

그리고 Kotlin은 기본 매개변수를 지원합니다.

따라서 @JvmOverloads를 사용해야 합니다. 기본 매개변수 값을 대체하는 함수에 대한 오버로드를 생성하도록 Kotlin 컴파일러에 지시합니다.
data 클래스Session를 아래와 같이 업데이트해 보겠습니다.

data class Session @JvmOverloads constructor(val name: String, val date: Date = Date())

@JvmOverloads를 사용하여 Kotlin 컴파일러에 함수에 대한 오버로드를 생성하도록 지시했습니다.

이제 아래와 같이 Java에서 객체를 생성하면:

Session sessionOne = new Session("Session One", new Date());
Session sessionTwo = new Session("Session Two");


그리고 완벽하게 작동합니다. Kotlin 컴파일러가 함수에 대한 오버로드를 생성했기 때문에 코드의 두 줄 모두 예상대로 컴파일됩니다.

Kotlin에서 JvmOverloads 주석을 사용하는 방법입니다.

지금은 그게 다입니다.

감사

Amit Shekhar

다음에서 나와 연결할 수 있습니다.


  • GitHub
  • Facebook

  • Read all of my high-quality blogs here.

    좋은 웹페이지 즐겨찾기