Pertama saya akan menyatakan bahwa saya jauh lebih akrab dengan enum di C # dan sepertinya enum di java sangat berantakan.
Seperti yang Anda lihat, saya mencoba menggunakan pernyataan switch @ enums dalam contoh saya berikutnya tetapi saya selalu mendapatkan kesalahan tidak peduli apa yang saya lakukan.
Kesalahan yang saya terima adalah:
Label kasus yang memenuhi syarat
SomeClass.AnotherClass.MyEnum.VALUE_A
harus diganti dengan konstanta enum yang tidak berkualitasVALUE_A
Masalahnya adalah saya cukup mengerti kesalahannya tetapi saya tidak bisa menulis VALUE_A karena enum terletak di sub-kelas lain. Apakah ada cara untuk menyelesaikan masalah ini? Dan mengapa itu terjadi di Jawa?
//Main Class
public class SomeClass {
//Sub-Class
public static class AnotherClass {
public enum MyEnum {
VALUE_A, VALUE_B
}
public MyEnum myEnum;
}
public void someMethod() {
MyEnum enumExample //...
switch (enumExample) {
case AnotherClass.MyEnum.VALUE_A: { <-- error on this line
//..
break;
}
}
}
}
java
enums
switch-statement
Popokoko
sumber
sumber
Enum
adalah sangat berguna sekali Anda mendapatkan memahamkan mereka - sama sekali tidak berantakan. Mereka jauh lebih fleksibel dan praktis daripada enum sederhana (hanya nilai integer berlabel) seperti yang terlihat pada platform lain. Lihat Tutorial Oracle . Temukan optimasiSet
/Map
implementasi:EnumSet
&EnumMap
.Jawaban:
Ubah ke ini:
Petunjuknya ada dalam kesalahan. Anda tidak perlu memenuhi syarat
case
label dengan jenis enum, hanya nilainya.sumber
Java menyimpulkan secara otomatis jenis elemen dalam
case
, sehingga label harus tidak memenuhi syarat.sumber
MyEnum
yang tidak masuk akal.static final int MY_CONST = 7; …; switch(intVariable) {case MY_CONST: …;}
bukannyacase 7
. Jadi pembatasan untuk enum ini tidak masuk akal (saya tidak hanya dapat menggunakan literal primer, tetapi juga konstanta yang didefinisikan secara manual untukswitch
ekspresi integer , tetapi saya tidak dapat menggunakan konstanta yang ditentukan secara manual, tetapi hanya nama primer untuk enum).ini harus dilakukan:
sumber
Salah:
Baik:
sumber
Ini adalah bagaimana saya menggunakannya. Dan itu bekerja dengan fantastis -
Dan
switch-case
seperti yang ditunjukkan di bawah inisumber
Tulis
someMethod()
dengan cara ini:Dalam pernyataan beralih Anda harus menggunakan nama konstan saja.
sumber