Как мы можем ссылаться на константы Kotlin в объявлении аннотации Java?

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 Studio 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"
  }
}

Есть ли какой-то другой синтаксис констант Kotlin, который работает при ссылке из аннотации Java?

CommonsWare
источник
финальный вал? .....
Рик Санчес
Какую версию 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!

CommonsWare
источник
Круто! Для чего он стоит, я использую немного более старую версию AS (все еще 3.5).
Natario
А ну понятно! У меня также есть более старая версия, 3.3.2
alvinalvord
1
Начиная с Kotlin 1.3.70 эта проблема решена (в Android Studio 3.6.1)
Мэтью Бахр