ฉันเจอปัญหานี้โดยที่ฉันไม่รู้enum
ประเภทที่แท้จริงฉันต้องวนซ้ำค่าที่เป็นไปได้
if (value instanceof Enum){
Enum enumValue = (Enum)value;
}
มีแนวคิดอย่างไรในการดึงค่าจาก enumValue ค่าที่เป็นไปได้?
ฉันเจอปัญหานี้โดยที่ฉันไม่รู้enum
ประเภทที่แท้จริงฉันต้องวนซ้ำค่าที่เป็นไปได้
if (value instanceof Enum){
Enum enumValue = (Enum)value;
}
มีแนวคิดอย่างไรในการดึงค่าจาก enumValue ค่าที่เป็นไปได้?
คำตอบ:
Object[] possibleValues = enumValue.getDeclaringClass().getEnumConstants();
getClass()
บนenum
ออบเจ็กต์อาจส่งคืนชนิดย่อยของenum
ประเภทนั้นเอง (ถ้าพูดenum
ค่าคงที่จะแทนที่วิธีการจากenum
ประเภท) getDeclaringClass()
ส่งคืนenum
ประเภทที่ประกาศค่าคงที่ซึ่งเป็นสิ่งที่คุณต้องการที่นี่
YourEnumClass[] yourEnums = YourEnumClass.class.getEnumConstants();
หรือ
YourEnumClass[] yourEnums = YourEnumClass.values();
YourEnumClass[] yourEnums = YourEnumClass.class.getEnumConstants();
แก้ไขปัญหาของฉันในการโทรจากวิธีการไม่คงที่
Enum
s ก็เหมือนกับClass
es ตรงที่มันถูกพิมพ์ รหัสปัจจุบันของคุณจะตรวจสอบว่าเป็น Enum โดยไม่ได้ระบุว่าเป็นส่วนหนึ่งของ Enum ประเภทใด
เนื่องจากคุณไม่ได้ระบุประเภทของ enum คุณจึงต้องใช้การสะท้อนเพื่อค้นหาว่ารายการของค่า enum คืออะไร
คุณสามารถทำได้ดังนี้:
enumValue.getDeclaringClass().getEnumConstants()
สิ่งนี้จะส่งคืนอาร์เรย์ของอ็อบเจ็กต์ Enum โดยแต่ละอ็อพชันเป็นหนึ่งในอ็อพชันที่ใช้ได้
วิธีค่า enum
enum.values () วิธีการที่ส่งคืนอินสแตนซ์ enum ทั้งหมด
public class EnumTest {
private enum Currency {
PENNY("1 rs"), NICKLE("5 rs"), DIME("10 rs"), QUARTER("25 rs");
private String value;
private Currency(String brand) {
this.value = brand;
}
@Override
public String toString() {
return value;
}
}
public static void main(String args[]) {
Currency[] currencies = Currency.values();
// enum name using name method
// enum to String using toString() method
for (Currency currency : currencies) {
System.out.printf("[ Currency : %s,
Value : %s ]%n",currency.name(),currency);
}
}
}
http://javaexplorer03.blogspot.in/2015/10/name-and-values-method-of-enum.html
... หรือ MyEnum.values ()? หรือฉันขาดอะไรไป?
ในที่นี้ Role คือ enum ซึ่งมีค่าต่อไปนี้ [ADMIN, USER, OTHER]
List<Role> roleList = Arrays.asList(Role.values());
roleList.forEach(role -> {
System.out.println(role);
});
คุณสามารถใช้ java.util.EnumSet เช่นนี้ได้
@Test
void test(){
Enum aEnum =DayOfWeek.MONDAY;
printAll(aEnum);
}
void printAll(Enum value){
Set allValues = EnumSet.allOf(value.getClass());
System.out.println(allValues);
}