2009-08-12 32 views
7

हर जावा गणन एक स्थिर मान हैं() विधि इसEnum.values ​​() परिभाषित किया गया है?

for (MyEnum enum : MyEnum.values()) { 
    // Do something with enum 
} 

की तरह इस्तेमाल किया जा सकता हालांकि, मैं समझ नहीं सकता है, जहां इस विधि परिभाषित किया गया है। Javadoc में इसका कोई उल्लेख नहीं है और यह स्रोत फ़ाइल में कहीं भी दिखाई नहीं देता है।

उत्तर

9

यह द्वारा Java Language Specification की आवश्यकता है में परिभाषित किया गया है: values और valueOf परोक्ष सभी Enums के लिए घोषित किया जाएगा:

/** 
* Returns an array containing the constants of this enum 
* type, in the order they're declared. This method may be 
* used to iterate over the constants as follows: 
* 
* for(E c : E.values()) 
*  System.out.println(c); 
* 
* @return an array containing the constants of this enum 
* type, in the order they're declared 
*/ 
public static E[] values(); 

/** 
* Returns the enum constant of this type with the specified 
* name. 
* The string must match exactly an identifier used to declare 
* an enum constant in this type. (Extraneous whitespace 
* characters are not permitted.) 
* 
* @return the enum constant with the specified name 
* @throws IllegalArgumentException if this enum type has no 
* constant with the specified name 
*/ 
public static E valueOf(String name); 

इन विधियों संकलन समय के दौरान जोड़ रहे हैं, इसलिए यदि आप का उपयोग करें कोड को अलग करने के लिए javap, आप वास्तव में अपने शरीर को देख सकते हैं।

2

यह स्पष्ट रूप से परिभाषित नहीं है, जैसे length जावा सरणी की संपत्ति परिभाषित नहीं है। यह ठोस एनम प्रकार के लिए पूरी तरह से उपलब्ध है।

संबंधित मुद्दे