Как мы можем ссылаться на константы 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?


финальный вал? .....
Рик Санчес

Какую версию 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).
Natario

А ну понятно! У меня также есть более старая версия, 3.3.2
alvinalvord

1
Начиная с Kotlin 1.3.70 эта проблема решена (в Android Studio 3.6.1)
Мэтью Бахр
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.