2011-09-26 21 views
15

Ngày hôm khác tôi đã cố gắng để làm điều này, nhưng nó không hoạt động:Java enum thiết ordinals tùy chỉnh

enum MyEnum {ONE = 1, TWO = 2} 

trước sự ngạc nhiên của tôi, nó không biên dịch !!! Làm thế nào để se thứ tự tùy chỉnh ???

Trả lời

35

Bạn không thể. Các đơn vị được cố định bằng cách bắt đầu từ 0 và làm việc. Từ tài liệu cho ordinal():

Trả về thứ tự của hằng số liệt kê này (vị trí của nó trong khai báo enum, trong đó hằng số ban đầu được gán thứ tự không).

Bạn không thể chỉ định giá trị của riêng mình. Mặt khác, bạn có thể có giá trị của riêng bạn trong enum:

public enum Foo { 
    ONE(1), TWO(2); 

    private final int number; 

    private Foo(int number) { 
     this.number = number; 
    } 

    public int getNumber() { 
     return number; 
    } 
} 
4

Đây là cách bạn có thể làm điều đó bằng tay:

enum MyEnum { 
    ONE(1), 
    TWO(2); 

    private int val; 

    private MyEnum(int val) { 
     this.val = val; 
    } 
} 
1

Thứ tự mà bạn xác định enums sẽ xác định ordinals .

enum MyEnum { 
    Enum1, Enum2; 
} 

Ở đây, Enum1 sẽ có thứ tự 1 và Enum2 sẽ có thứ 2.

Nhưng bạn có thể có các thuộc tính tùy chỉnh cho mỗi enum:

enum MyEnum { 
    Enum1(1), Enum2(2); 

    private int ord ; 

    MyEnum(int ord) { 
     this.ord = ord; 
    } 

    public int getOrd() { 
     return this.ord; 
    } 
} 
+1

là nó có thể ghi đè lên ordinal()? – gotch4

+3

Không ... nó là một phương pháp cuối cùng, vì vậy nó không thể bị ghi đè –

+2

Tôi nghĩ rằng Enum1 sẽ có thứ tự 0 và không 1. Và Enum2 sẽ có thứ tự 1 và không 2. – RaphMclee