Java 어노테이션 선언에서 Kotlin 상수를 어떻게 참조 할 수 있습니까?


13

Kotlin이 다음과 같이 주어집니다.

object OldTownRoad {
  const val COWBOY_HATS = "from Gucci"
  const val WRANGLER = "on my booty"
}

그리고이 자바 클래스 :

public class Scrap {
  @Named(OldTownRoad.COWBOY_HATS)
  public void lilNasXrefs() {
    System.out.println(OldTownRoad.COWBOY_HATS);
    System.out.println(OldTownRoad.WRANGLER);
  }
}

컴파일러는 println()호출에 만족 합니다. 그것은의 사용에 대해 불평 COWBOY_HATS에서 @Named이 안드로이드 스튜디오 3.5.3 스크린 샷에서 볼 수 있듯이, "속성 값이 일정해야합니다"라고, 주석 :

코 틀린 오류

나는 노력 @JvmStatic@JvmField이들에 대한 const val선언하지만, 컴파일러는 유효하지도 없다고 불평 const속성.

나는 동일한 결과를 얻는다 companion object:

class OldTownRoad {
  companion object {
    const val COWBOY_HATS = "from Gucci"
    const val WRANGLER = "on my booty"
  }
}

Java 주석에서 참조 할 때 작동하는 다른 Kotlin 상수 구문이 있습니까?


final val? .....
Rick Sanchez

어떤 Kotlin 버전을 사용하고 있습니까? 이것을 재현 할 수 없습니다.
natario

@RickSanchez : final const val"최종은 중복 수정 자"가됩니다. 그것도 final val문제를 해결 하지도 않습니다 .
CommonsWare

@ natario : Kotlin 1.3.61
CommonsWare

@ natario : 당신이 그것을 재현 할 수 없다는 것을 지적 해 주셔서 감사합니다! 이것은 악성 Android Studio 검사 오류 인 것 같습니다. 코드가 올바르게 컴파일됩니다.
CommonsWare

답변:


10

이것이 Android Studio 버그인지 잊었습니다. 페이스 팜 :

코드를 실행하면 정상적으로 실행됩니다. Android Studio 3.5.3은 불필요하게 불평하는 것 같습니다.

문제를 확인하기 위해 버그 보고서 를 제출 했습니다 .

@natario 덕분에 많은 의견을 들었습니다.이 의견은 이것이 IDE 문제 일 수 있음을 깨달았습니다!


멋있는! 가치가있는 것을 위해 약간 오래된 버전의 AS (여전히 3.5 버전)를 사용하고 있습니다.
natario

아 알 겠어요! 또한 이전 버전, 3.3.2이
alvinalvord

1
Kotlin 1.3.70부터이 문제가 해결되었습니다 (Android Studio 3.6.1)
Matthew Bahr
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.