Apabila bekerja dengan pernyataan suis Java, adalah penting untuk memastikan bahawa ungkapan yang digunakan dalam label kes adalah ungkapan tetap. Ungkapan malar ialah ungkapan yang dinilai pada masa penyusunan dan menghasilkan nilai malar. Ini perlu kerana pengkompil perlu mengetahui nilai tepat ungkapan untuk menentukan kes yang hendak dilaksanakan.
Dalam contoh berikut, kita mempunyai kelas dengan tiga pemalar statik:
public abstract class Foo { ... public static final int BAR; public static final int BAZ; public static final int BAM; ... }
Kami kemudiannya mempunyai kaedah yang menggunakan pernyataan suis untuk mendapatkan rentetan yang berkaitan berdasarkan pemalar:
public static String lookup(int constant) { switch (constant) { case Foo.BAR: return "bar"; case Foo.BAZ: return "baz"; case Foo.BAM: return "bam"; default: return "unknown"; } }
Walau bagaimanapun, apabila kami cuba menyusun kod ini, kami mendapat ralat perlu ungkapan berterusan pada setiap tiga label kes. Ini kerana, walaupun pemalar adalah malar dari perspektif mana-mana kod yang dilaksanakan selepas medan telah dimulakan, ia bukan pemalar masa menyusun dalam erti kata yang diperlukan oleh Spesifikasi Bahasa Java (JLS).
Secara khusus , JLS mentakrifkan ungkapan malar sebagai ungkapan yang boleh dinilai pada masa penyusunan untuk menghasilkan nilai malar. Ini bermakna ungkapan itu tidak boleh mengandungi sebarang pembolehubah yang bukan pemalar sendiri, atau sebarang operasi yang bukan pemalar sendiri.
Dalam contoh kami, pemalar Foo.BA* bukan pemalar masa menyusun kerana mereka tidak mempunyai pemula. Untuk membetulkannya, kita hanya boleh memulakan pemalar dengan ungkapan pemalar masa kompilasi:
public abstract class Foo { ... public static final int BAR = 1; public static final int BAZ = 2; public static final int BAM = 3; ... }
Kini, apabila kita menyusun kod, ia sepatutnya berjaya menyusun.
Ia juga penting untuk diperhatikan bahawa enum boleh digunakan dan bukannya pemalar int dalam pernyataan suis. Walau bagaimanapun, enum mempunyai beberapa sekatan yang tidak dimiliki oleh pemalar int. Sebagai contoh, enum mesti mempunyai kes lalai, walaupun anda mempunyai kes untuk setiap nilai enum yang diketahui. Selain itu, label kes mestilah semua nilai enum yang jelas, bukan ungkapan yang menilai kepada nilai enum.
Atas ialah kandungan terperinci Mengapa Pernyataan Suis Java Saya Membuang Ralat 'Ungkapan Malar Diperlukan' Apabila Menggunakan Pemalar Statik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!