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; ... }
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 }
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!