2012-08-10 28 views
10

thể trùng lặp:
enum.values() - is an order of returned enums deterministicsẽ trật tự cho enum.values ​​() luôn cùng

Tôi có một cái gì đó enum như dưới đây: -

enum Direction { 

    EAST, 
    WEST, 
    NORTH, 
    SOUTH 
} 

Nếu i nói values() trên hướng enum, sau đó sẽ thứ tự của giá trị vẫn giữ nguyên mọi lúc. Ý tôi là thứ tự của các giá trị sẽ luôn ở dưới đây foramt:

EAST,WEST,NORTH,SOUTH 

hoặc có thể thay đổi thứ tự tại bất kỳ thời điểm nào.

Trả lời

14

Mỗi loại Enum có phương thức tĩnh values trả về một mảng chứa tất cả các giá trị của loại enum theo thứ tự chúng được khai báo.

Phương pháp này thường được sử dụng kết hợp với vòng lặp for-each để lặp qua các giá trị của một loại được liệt kê.

liên kết tài liệu

Java 7 Spec: http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.9.2

+3

+1 Tôi khuyên bạn nên sử dụng tài liệu tham khảo Java 7 nếu bạn có thể làm Java 5.0 là EOL. –

+0

@PeterLawrey đã hoàn thành. –

+2

Để cử tri xuống, nếu bạn có thể để lại một gợi ý để cải thiện câu trả lời, tôi sẽ sẵn sàng làm như vậy. –

2

Hành vi của phương pháp đó được định nghĩa trong Java Language Specification #8.9.2:

Bên cạnh đó, nếu E là tên của một loại enum, sau đó loại có các phương thức tĩnh được khai báo ngầm sau đây:

/** 
* 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(); 
1

Như 2 câu trả lời trước Nói, thứ tự là thứ tự khai báo. Tuy nhiên, thực hành tốt không dựa vào thứ tự này (hoặc theo thứ tự của enum). Nếu ai đó sắp xếp lại khai báo hoặc thêm phần tử mới vào giữa khai báo, hành vi của mã có thể thay đổi bất ngờ. Nếu có lệnh cố định, tôi sẽ thực hiện Comparable.

1

Enums được sử dụng để hạn chế các giá trị của biến thành một trong các giá trị được khai báo duy nhất trong danh sách liệt kê.

Các giá trị này là public static final, tức là (Đối tượng không đổi của loại Enum cụ thể) và Thứ tự của nó là rất quan trọng để ánh xạ các biến cho các đối tượng này.

values()static method of Enum, trong đó luôn trả về giá trị theo cùng thứ tự.

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