Rumah > Java > javaTutorial > Mengapa Pernyataan Suis Java Saya Tidak Menerima Pemalar Statik daripada Kelas Abstrak?

Mengapa Pernyataan Suis Java Saya Tidak Menerima Pemalar Statik daripada Kelas Abstrak?

Patricia Arquette
Lepaskan: 2024-12-19 21:29:13
asal
889 orang telah melayarinya

Why Doesn't My Java Switch Statement Accept Static Constants from an Abstract Class?

Pernyataan Suis Java: Menyelesaikan masalah Keperluan Ungkapan Malar

Dalam senario yang dibentangkan, pernyataan suis cuba memadankan pemalar integer dengan pemalar statik yang ditentukan dalam kelas abstrak. Walau bagaimanapun, kompilasi gagal dengan ralat "ungkapan malar diperlukan".

Difahamkan, ungkapan pemalar masa kompilasi diperlukan untuk pernyataan suis. Namun, pemalar Foo.BAR, Foo.BAZ dan Foo.BAM kelihatan malar.

Mengapakah pemalar ini tidak dianggap sebagai ungkapan pemalar masa kompilasi?

Menurut Spesifikasi Bahasa Java (JLS) §15.28, ungkapan pemalar masa kompilasi hanya terdiri daripada jenis primitif tertentu dan literal, tidak termasuk rujukan objek. Dalam kes ini, Foo.BAR bukan ungkapan pemalar masa kompilasi kerana ia merujuk kepada medan statik, yang dimulakan pada masa jalan, bukan masa kompilasi.

Menyelesaikan isu:

Untuk menyelesaikan isu ini, pembolehubah Foo.BA* mesti dimulakan dengan pemalar masa kompilasi ungkapan:

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

Dengan pemula ini, pengkompil boleh menentukan nilai Foo.BA* pada masa penyusunan, menjadikannya sah untuk digunakan dalam pernyataan suis.

Alternatif pendekatan menggunakan enums:

Pilihan lain untuk memastikan nilai pemalar masa kompilasi adalah menggunakan enums:

public enum FooConstants {
    BAR,
    BAZ,
    BAM
}
Salin selepas log masuk

Walau bagaimanapun, menggunakan enums mengenakan sekatan tambahan, seperti memerlukan kes lalai dan melarang label kes yang menilai kepada ungkapan.

Atas ialah kandungan terperinci Mengapa Pernyataan Suis Java Saya Tidak Menerima Pemalar Statik daripada Kelas Abstrak?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan