เราจะอ้างอิงค่าคงที่ 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 นี้:

ข้อผิดพลาด Kotlin

ฉันพยายาม@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 รุ่นใดอยู่ ฉันทำซ้ำไม่ได้
นาตาริโอ

@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)
นาตาริโอ

อ้อเข้าใจแล้ว! ฉันยังมีรุ่นเก่ากว่า 3.3.2
alvinalvord

1
ตั้งแต่ Kotlin 1.3.70 ปัญหานี้แก้ไขได้ (ใน Android Studio 3.6.1)
Matthew Bahr
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.