Rumah > Java > javaTutorial > Mengapa Pernyataan Suis Java Saya Membuang Ralat 'Ungkapan Malar Diperlukan' Apabila Menggunakan Pemalar Statik?

Mengapa Pernyataan Suis Java Saya Membuang Ralat 'Ungkapan Malar Diperlukan' Apabila Menggunakan Pemalar Statik?

DDD
Lepaskan: 2024-12-08 17:59:12
asal
622 orang telah melayarinya

Why Does My Java Switch Statement Throw a

Pernyataan suis Java: Ungkapan malar ralat tidak dijangka apabila menggunakan pemalar statik

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;
    ...
}
Salin selepas log masuk

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";
    }
}
Salin selepas log masuk

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;
    ...
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan