Javaアノテーション宣言でKotlin定数を参照するにはどうすればよいですか?


13

Kotlinのこのビットを考えると:

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

そしてこのJavaクラス:

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このAndroidのメーカー3.5.3スクリーンショットに見られるように、「属性値が一定でなければならない」と言って、注釈:

Kotlinエラー

私が試した@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定数構文はありますか?


最終値?.....
リックサンチェス

どのKotlinバージョンを使用していますか?これは再現できません。
natario

@RickSanchez:final const val「finalは冗長修飾子です」という結果になります。それもfinal val問題を解決するものでもありません。
CommonsWare

@natario:Kotlin 1.3.61
CommonsWare

@natario:再現できなかったことを指摘してくれてありがとう!これは不正なAndroid Studio検査エラーのようです-コードは正常にコンパイルされます。
CommonsWare

回答:


10

これがAndroid Studioのバグかどうかを確認するのを忘れていました。:facepalm:

コードを実行すると、問題なく実行されることがわかります。Android Studio 3.5.3が不必要に不満を持っているようです。

問題の確認を得るためにバグレポートを提出しまし

@natarioに感謝します。コメントにより、これはIDEの問題である可能性があります。


涼しい!価値があるので、少し古いバージョンのAS(まだ3.5)を使用しています。
ナタリオ

ああなるほど!私はまた、古いバージョン、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.