のプロパティのゲッターに@JvmNameを適用します。Javaの相互運用:通常、我々はkotlinに次のコードを書くことができるインタフェースまたは抽象クラス
val hasValue : Boolean
@JvmName("hasValue") get() = true
これはJavaの相互運用方法hasValue()
代わりのgetHasValue()
を生成します。 。
しかし、インターフェイスで、これは私のコンパイルエラーを与える:
同じ抽象クラスに次の宣言のために行くval hasValue : Boolean
@JvmName("hasValue") get
:だからここ
abstract val hasValue : Boolean
@JvmName("hasValue") get
は私の質問は:どのように私はkotlinのコンパイラに、getHasValue()
の代わりにhasValue()
を使用してkotlinインターフェイスのプロパティのゲッタ(およびセッタ)を使用するように指示できますか?
あなたの議論オーバーライドプロパティには意味がありますが、何もオーバーライドしない抽象的な/開いているプロパティに対しては意味がありません。注釈付きプロパティをオーバーライドすると、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