จะรับค่า enum ทั้งหมดใน Java ได้อย่างไร?


97

ฉันเจอปัญหานี้โดยที่ฉันไม่รู้enumประเภทที่แท้จริงฉันต้องวนซ้ำค่าที่เป็นไปได้

if (value instanceof Enum){
   Enum enumValue = (Enum)value;
}

มีแนวคิดอย่างไรในการดึงค่าจาก enumValue ค่าที่เป็นไปได้?

คำตอบ:


155
Object[] possibleValues = enumValue.getDeclaringClass().getEnumConstants();

ทำไมคุณถึงใช้ getDeclaringClass ()?
Peter Kriens

3
@PeterKriens: เนื่องจากgetClass()บนenumออบเจ็กต์อาจส่งคืนชนิดย่อยของenumประเภทนั้นเอง (ถ้าพูดenumค่าคงที่จะแทนที่วิธีการจากenumประเภท) getDeclaringClass()ส่งคืนenumประเภทที่ประกาศค่าคงที่ซึ่งเป็นสิ่งที่คุณต้องการที่นี่
ColinD

ขอบคุณ! ฉันไม่ได้ตระหนักถึงกรณีนั้น แต่คุณพูดถูกค่าคงที่อาจเป็นคลาสภายในที่ไม่ระบุตัวตน
Peter Kriens

104
YourEnumClass[] yourEnums = YourEnumClass.class.getEnumConstants();

หรือ

YourEnumClass[] yourEnums = YourEnumClass.values();

1
YourEnumClass[] yourEnums = YourEnumClass.class.getEnumConstants();แก้ไขปัญหาของฉันในการโทรจากวิธีการไม่คงที่
Jeremy

15

Enums ก็เหมือนกับClasses ตรงที่มันถูกพิมพ์ รหัสปัจจุบันของคุณจะตรวจสอบว่าเป็น Enum โดยไม่ได้ระบุว่าเป็นส่วนหนึ่งของ Enum ประเภทใด

เนื่องจากคุณไม่ได้ระบุประเภทของ enum คุณจึงต้องใช้การสะท้อนเพื่อค้นหาว่ารายการของค่า enum คืออะไร

คุณสามารถทำได้ดังนี้:

enumValue.getDeclaringClass().getEnumConstants() 

สิ่งนี้จะส่งคืนอาร์เรย์ของอ็อบเจ็กต์ Enum โดยแต่ละอ็อพชันเป็นหนึ่งในอ็อพชันที่ใช้ได้


14

วิธีค่า 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


7

... หรือ MyEnum.values ​​()? หรือฉันขาดอะไรไป?


2
ใช่คลาสจริงของ enum ไม่สามารถใช้งานได้ที่นี่เพื่อเรียกใช้เมธอดแบบคงที่เป็นเพียงตัวอย่างของ Enum บางประเภทย่อย
ColinD

4

ในที่นี้ Role คือ enum ซึ่งมีค่าต่อไปนี้ [ADMIN, USER, OTHER]

List<Role> roleList = Arrays.asList(Role.values());
roleList.forEach(role -> {
    System.out.println(role);
    });

อย่างไรก็ตามนี่ไม่ใช่เรื่องทั่วไป คำถามเกี่ยวกับกรณีที่มีวัตถุ Enum เท่านั้น ดังนั้นคุณต้องผ่านการประกาศคลาสหรือดีกว่าผ่าน EnumSet
zeratul021

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.