Rumah >Java >javaTutorial >Mengapakah Pernyataan Suis Java Tidak Menerima Pembolehubah Yang Nampak Malar sebagai Label Kes?

Mengapakah Pernyataan Suis Java Tidak Menerima Pembolehubah Yang Nampak Malar sebagai Label Kes?

Linda Hamilton
Linda Hamiltonasal
2024-12-10 15:44:10838semak imbas

Why Doesn't Java's Switch Statement Accept Seemingly Constant Variables as Case Labels?

Kekeliruan Ungkapan Malar Pernyataan Suis Java

Dalam Java, pernyataan suis memerlukan ungkapan malar sebagai label kes. Walau bagaimanapun, pembangun sering menghadapi ralat yang mengadu tentang ungkapan tidak tetap walaupun semasa menggunakan pembolehubah yang kelihatan tetap.

Pertimbangkan contoh berikut:

public abstract class Foo {
    public static final int BAR;
    public static final int BAZ;
    public static final int BAM;

    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";
        }
    }
}

Apabila menyusun kod ini, anda mungkin menghadapi "pemalar ungkapan diperlukan" ralat pada setiap label kes.

Mengapa tidak Foo.BAR pembolehubah pemalar?

Walaupun pembolehubah Foo.BAR dimalarkan secara berkesan dari perspektif pelaksanaan, ia bukan "pemalar masa kompilasi" seperti yang diperlukan oleh Spesifikasi Bahasa Java (JLS). Bahagian 15.28 JLS mentakrifkan ungkapan malar sebagai:

  • Merujuk kepada jenis primitif atau Rentetan
  • Hanya menggunakan literal, pembolehubah malar dan kurungan
  • Tidak termasuk pengendali tugasan, , --, dan instanceof
  • Tidak termasuk taip hantaran kecuali jenis primitif atau String

Dalam contoh di atas, pembolehubah Foo.BAR tidak diisytiharkan dengan pemula eksplisit, oleh itu ia tidak layak sebagai pemalar masa kompilasi.

Penyelesaian:

Untuk menyelesaikan ralat, mulakan pembolehubah Foo.BAR dengan ungkapan pemalar masa kompilasi:

public static final int BAR = 1;
public static final int BAZ = 2;
public static final int BAM = 3;

Atas ialah kandungan terperinci Mengapakah Pernyataan Suis Java Tidak Menerima Pembolehubah Yang Nampak Malar sebagai Label Kes?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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