जावा में सभी एनम मान कैसे प्राप्त करें?


95

मुझे इस समस्या के बारे में पता चला कि मुझे वास्तविक enumप्रकार की जानकारी के बिना मुझे इसके संभावित मूल्यों को पुनरावृत्त करने की आवश्यकता है।

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

किसी भी विचार कैसे अपने संभावित मूल्यों enumValue से निकालने के लिए?

जवाबों:


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

आप getDeclaringClass () का उपयोग क्यों करते हैं?
पीटर क्रिएंस

3
@PeterKriens: क्योंकि getClass()एक enumवस्तु पर ही प्रकार का एक उपप्रकार वापस आ सकता enumहै (यदि, कहते हैं, enumनिरंतर enumप्रकार से एक विधि को ओवरराइड करता है )। getDeclaringClass()उस enumप्रकार को लौटाता है जो उस स्थिर को घोषित करता है, जो आप यहाँ चाहते हैं।
कॉलिनडी

धन्यवाद! मुझे उस मामले का अहसास नहीं था लेकिन आप सही हैं, यह निरंतर एक अनाम आंतरिक वर्ग का हो सकता है।
पीटर क्रिएन्स

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

या

YourEnumClass[] yourEnums = YourEnumClass.values();

YourEnumClass[] yourEnums = YourEnumClass.class.getEnumConstants();एक गैर-स्थैतिक विधि से कॉल करने की मेरी समस्या को हल किया।
जेरेमी

15

Enums इस प्रकार हैं Classकि वे टाइप किए गए हैं। आपका वर्तमान कोड सिर्फ यह जाँचता है कि यह एक एनम है, यह निर्दिष्ट किए बिना कि एनम किस प्रकार का है।

क्योंकि आपने enum के प्रकार को निर्दिष्ट नहीं किया है, इसलिए आपको पता लगाने के लिए प्रतिबिंब का उपयोग करना होगा कि enum मानों की सूची क्या है।

आप इसे ऐसा कर सकते हैं:

enumValue.getDeclaringClass().getEnumConstants() 

यह Enum ऑब्जेक्ट्स की एक सरणी लौटाएगा, जिसमें प्रत्येक उपलब्ध विकल्पों में से एक होगा।


14

वैल्यू ऑफ़ एनम

enum.values ​​() विधि जो सभी एनम उदाहरणों को वापस करती है।

  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 के कुछ उपप्रकार का उदाहरण।
कॉलिंस

3

यहाँ, रोल एक एनम है जिसमें निम्नलिखित मान शामिल हैं [ADMIN, USER, OTHER]।

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

हालाँकि, यह सामान्य नहीं है। सवाल उस मामले के बारे में है जब केवल एनम ऑब्जेक्ट है। इसलिए आपको या तो एनमसेट के माध्यम से कक्षा या बेहतर घोषित करने की आवश्यकता है।
zeratul021

3

कोई भी 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);
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.