Як можна вказати константи Котліна в декларації анотації Java?


13

Враховуючи цей шматочок Котліна:

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

Чи є якийсь інший постійний синтаксис Котліна, який працює при посиланні з анотації на Java?


заключний вал? .....
Рік Санчес

Яку версію Kotlin ви використовуєте? Я не можу це відтворити.
natario

@RickSanchez: final const valрезультати "фінал є надлишковим модифікатором". Ні це, ні final valусунути проблему.
CommonsWare

@natario: Kotlin 1.3.61
CommonsWare

@natario: Дякую, що вказали, що ви не могли спростувати це! Здається, це помилкова інспекція Android Studio - код складається добре.
CommonsWare

Відповіді:


10

Я забув подивитися, чи це помилка Android Studio. : facepalm:

Виявляється, якщо запустити код, він працює добре. Android Studio 3.5.3, здається, скаржиться без потреби.

Я подав звіт про помилку, щоб спробувати отримати підтвердження проблеми.

Велике спасибі @natario, чий коментар дав мені зрозуміти, що це може бути проблема ІДЕ!


Класно! Для чого варто використовувати трохи старшу версію AS (все ще 3.5).
natario

О Я бачу! Також у мене є старша версія, 3.3.2
alvinalvord

1
Станом на Kotlin 1.3.70 ця проблема вирішена (в Android Studio 3.6.1)
Matthew Bahr
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.