Java Ek Açıklama Bildirimi'nde Kotlin Sabitlerine Nasıl Başvurabiliriz?


13

Kotlin'in bu biti göz önüne alındığında:

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

ve bu Java sınıfı:

public class Scrap {
  @Named(OldTownRoad.COWBOY_HATS)
  public void lilNasXrefs() {
    System.out.println(OldTownRoad.COWBOY_HATS);
    System.out.println(OldTownRoad.WRANGLER);
  }
}

Derleyici println()aramalardan memnun . Bu kullanımı hakkında şikayet COWBOY_HATSde @Namedbu Android Studio 3.5.3 ekran görüntüsünde görüldüğü gibi, "Özellik değeri sabit olmalıdır" diyerek açıklama:

Kotlin hatası

Ben denedim @JvmStaticve @JvmFieldbu const valbildirimler üzerinde, ama derleyici hiçbiri constözellikleri için geçerli şikayet ediyor .

Aynı sonuçları bir companion object:

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

Java ek açıklamasından bahsedildiğinde çalışan başka bir Kotlin sabit sözdizimi var mı?


final val? .....
Rick Sanchez

Hangi Kotlin sürümünü kullanıyorsunuz? Bunu yeniden üretemem.
natario

@RickSanchez: final const val"final yedek bir değiştiricidir" ile sonuçlanır. Ne bu ne de final valsorunu çözer.
CommonsWare

@natario: Kotlin 1.3.61
CommonsWare

@natario: Onu kopyalayamadığınızı işaret ettiğiniz için teşekkürler! Görünüşe göre bu haydut bir Android Studio denetim hatası - kod iyi derliyor.
CommonsWare

Yanıtlar:


10

Bunun bir Android Studio hatası olup olmadığını görmeyi unuttum. : Facepalm:

Kodu çalıştırırsanız, iyi çalıştığı ortaya çıkıyor. Android Studio 3.5.3 gereksiz yere şikayet ediyor gibi görünüyor.

Ben açtı bir hata raporu sorununun onay almak için denemek için.

Yorumumun bunun bir IDE sorunu olabileceğini anlamamı sağlayan @natario'ya çok teşekkürler!


Güzel! Değer için AS biraz eski bir sürümünü kullanıyorum (hala 3.5).
natario

Ah anlıyorum! Ayrıca daha eski bir versiyonum var, 3.3.2
alvinalvord

1
Kotlin 1.3.70'den itibaren bu sorun çözüldü (Android Studio 3.6.1'de)
Matthew Bahr
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.