보통 인터페이스 또는 추상 클래스의 속성 게터에 @JvmName를 적용, 우리는 코 틀린에 다음 코드를 작성할 수 있습니다자바 상호 운용성이 :
val hasValue : Boolean
@JvmName("hasValue") get() = true
이 자바 상호 운용성 방법 hasValue()
대신 getHasValue()
를 생성합니다 .
그러나, 인터페이스, 이것은 나에게 컴파일 오류를 제공합니다 :
같은이 추상 클래스에 다음 선언에 간다val hasValue : Boolean
@JvmName("hasValue") get
: 그래서 여기
abstract val hasValue : Boolean
@JvmName("hasValue") get
내 질문은 : 어떻게 kotlin 컴파일러에 hasValue()
대신에 getHasValue()
을 사용할 수 있습니까? kotlin 인터페이스의 속성 getters (및 setters)에 대해?
귀하의 논증을 재정의 속성에 대해서는 의미가 있지만 아무 것도 무시하지 않는 추상/열린 속성에는 적합하지 않습니다. 주석이 달린 속성을 재정의하면 jvm 서명을 상속 받아야합니다. – msrd0
맞습니다. @ JvmName은 재정의되거나 재정의 할 수있는 함수에 대해 모두 금지됩니다. https://github.com/JetBrains/kotlin/blob/19e38bbc725ec68c9d40bc5c4ad8945266df7231/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/declarationCheckers.kt#L141 @ msrd0,이 대답은 정확합니다. 받아 들여야한다. –
@ Miha_x64이 답변은 정확하지만 "Kotlin 컴파일러에게 어떻게 말할 수 있습니까?"라는 질문에는 대답하지 않습니다. "Kotlin 컴파일러에게 말할 수 있습니까?"라는 질문에 대답 할 것입니다. – msrd0