Biorąc pod uwagę ten kawałek Kotlina:
object OldTownRoad {
const val COWBOY_HATS = "from Gucci"
const val WRANGLER = "on my booty"
}
i ta klasa Java:
public class Scrap {
@Named(OldTownRoad.COWBOY_HATS)
public void lilNasXrefs() {
System.out.println(OldTownRoad.COWBOY_HATS);
System.out.println(OldTownRoad.WRANGLER);
}
}
Kompilator jest zadowolony z println()
połączeń. Skarży się na użycie COWBOY_HATS
w @Named
adnotacji, mówiąc: „Wartość atrybutu musi być stała”, jak widać na zrzucie ekranu Android Studio 3.5.3:
Próbowałem @JvmStatic
i @JvmField
na tych const val
deklaracjach, ale kompilator narzeka, że żadna z nich nie jest ważna dla const
właściwości.
Otrzymuję te same wyniki od companion object
:
class OldTownRoad {
companion object {
const val COWBOY_HATS = "from Gucci"
const val WRANGLER = "on my booty"
}
}
Czy istnieje inna składnia stałej Kotlin, która działa, gdy odwołuje się do niej adnotacja Java?
final const val
powoduje, że „finał jest redundantnym modyfikatorem”. Ani to, ani niefinal val
rozwiąże problemu.Odpowiedzi:
Zapomniałem zobaczyć, czy to błąd w Android Studio. : facepalm:
Okazuje się, że jeśli uruchomisz kod, będzie działał dobrze. Android Studio 3.5.3 wydaje się niepotrzebnie narzekać.
I złożył raport o błędzie , aby spróbować dostać potwierdzenie problemu.
Ogromne podziękowania dla @natario, którego komentarz uświadomił mi, że może to być problem IDE!
źródło