2009-08-12 39 views
7

Mỗi Java liệt kê có một giá trị tĩnh() phương pháp có thể được sử dụng như thế nàyGiá trị Enum.values ​​() được xác định ở đâu?

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

Tuy nhiên, tôi không thể tìm ra nơi phương pháp này được xác định. Không có đề cập đến nó trong Javadoc và nó không xuất hiện bất cứ nơi nào trong tập tin nguồn.

Trả lời

9

này được yêu cầu của Java Language Specification: valuesvalueOf sẽ được mặc nhiên công bố cho tất cả 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); 

Những phương pháp này được bổ sung trong thời gian biên dịch, vì vậy nếu bạn sử dụng javap để tháo rời mã, bạn có thể thực sự nhìn vào cơ thể của họ.

2

Nó không được xác định rõ ràng, giống như length thuộc tính của mảng java chưa được xác định. Nó là hoàn toàn có sẵn cho loại Enum cụ thể.

Các vấn đề liên quan