Kotlin의 JvmField 주석

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

이 블로그에서는 Kotlin의 JvmField 주석에 대해 알아봅니다.

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

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

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

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

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

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


아래와 같이 객체를 생성하고 Kotlin에서 name을 가져올 수 있습니다.

val session = Session("Session", Date())
val name = session.name


예상대로 작동합니다.

그러나 객체를 생성하고 Java에서 아래와 같이 name을 가져올 때:

Session session = new Session("Session", new Date());
String name = session.name; // compilation error


컴파일되지 않습니다. Java에서 아래와 같이 getter 메서드를 사용해야 합니다.

Session session = new Session("Session", new Date());
String name = session.getName();


이제 예상대로 컴파일되고 작동합니다.

따라서 질문은 다음과 같습니다. Kotlin에서 사용하는 것처럼 getter 메서드 없이 사용할 수 있습니까?

대답은 '예'입니다. JvmField 주석을 사용합니다. 따라서 필드를 getter 또는 setter가 아닌 일반 필드로 사용하려면 컴파일러에 동일한 getter 및 setter를 생성하지 않도록 지시하고 @JvmField 주석을 사용하여 필드로 노출해야 합니다. .
data 클래스 Session을 아래와 같이 업데이트해 보겠습니다.

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

@JvmField 필드에 대해 name을 사용하여 Kotlin 컴파일러에 동일한 getter 및 setter를 생성하지 않고 필드로 노출하도록 지시했습니다.

이제 아래와 같이 개체를 만들고 Java에서 name을 가져오면 다음과 같습니다.

Session session = new Session("Session", new Date());
String name = session.name;


이제 완벽하게 작동합니다. Kotlin 컴파일러는 이에 대한 getter 및 setter를 생성하지 않고 필드로 노출하므로 예상대로 컴파일됩니다.

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

지금은 그게 다입니다.

감사

Amit Shekhar

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


  • GitHub
  • Facebook

  • Read all of my high-quality blogs here.

    좋은 웹페이지 즐겨찾기