2009-07-01 25 views

Trả lời

252

Java enums không giống như C hoặc C++ enums, mà thực sự chỉ là nhãn cho số nguyên.

Java enums được triển khai giống như các lớp - và thậm chí chúng có nhiều thuộc tính.

public enum Ids { 
    OPEN(100), CLOSE(200); 

    private final int id; 
    Ids(int id) { this.id = id; } 
    public int getValue() { return id; } 
} 

Sự khác biệt lớn là họ đang kiểu an có nghĩa là bạn không cần phải lo lắng về việc gán một enum COLOR cho một biến SIZE.

Xem http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html để biết thêm.

+0

Dựa trên câu lệnh của bạn, cách tốt nhất là sử dụng java để tạo ra một enum các số nguyên tuần tự (tương tự với một enum C++), cho một chỉ mục thành một mảng hoặc một cái gì đó, viết: enum Ids { NAME (0), TUỔI (1), HEIGHT (2), TRỌNG LƯỢNG (3); } Cảm ơn bạn, -bn –

+0

Có thể, và đặc biệt nếu bạn đã từng sắp xếp các giá trị tích phân ở đâu đó. – lavinio

+1

bạn có thể cho biết cách sử dụng enum này trong một hàm không? –

73

Có. Bạn có thể chuyển các giá trị số cho hàm tạo cho enum, như vậy:

enum Ids { 
    OPEN(100), 
    CLOSE(200); 

    private int value;  

    private Ids(int value) { 
    this.value = value; 
    } 

    public int getValue() { 
    return value; 
    } 
} 

Xem Sun Java Language Guide để biết thêm thông tin.

+0

mát. Có thể trộn không? I E. chỉ gán các số cho các giá trị Enum đã chọn. –

+0

private modifier là thừa cho các hàm tạo enum –

10

Nếu bạn sử dụng các loại enum rất lớn thì sau đây có thể hữu ích;

10

whats về việc sử dụng theo cách này:

public enum HL_COLORS{ 
      YELLOW, 
      ORANGE; 

      public int getColorValue() { 
       switch (this) { 
      case YELLOW: 
       return 0xffffff00; 
      case ORANGE: 
       return 0xffffa500;  
      default://YELLOW 
       return 0xffffff00; 
      } 
      } 
} 

chỉ có một phương pháp ..

bạn có thể sử dụng phương pháp tĩnh và vượt qua Enum như tham số như:

public enum HL_COLORS{ 
      YELLOW, 
      ORANGE; 

      public static int getColorValue(HL_COLORS hl) { 
       switch (hl) { 
      case YELLOW: 
       return 0xffffff00; 
      case ORANGE: 
       return 0xffffa500;  
      default://YELLOW 
       return 0xffffff00; 
      } 
      } 

Lưu ý rằng hai cách này sử dụng ít bộ nhớ hơn và nhiều đơn vị xử lý hơn. t nói đây là cách tốt nhất nhưng nó chỉ là một cách tiếp cận khác.

+1

Tại sao 'getColorValue()' được đồng bộ hóa trong ví dụ thứ hai? – josaphatv

+0

Nó không có ý nghĩa .. Tôi đã xóa nó khỏi mã .. cảm ơn –

2

Nếu bạn muốn bắt chước enum của C/C++ (cơ sở num và nexts incrementals):

enum ids { 
    OPEN, CLOSE; 
    // 
    private static final int BASE_ORDINAL = 100; 
    public int getCode() { 
     return ordinal() + BASE_ORDINAL; 
    } 
}; 

public class TestEnum { 
    public static void main (String... args){ 
     for (ids i : new ids[] { ids.OPEN, ids.CLOSE }) { 
      System.out.println(i.toString() + " " + 
       i.ordinal() + " " + 
       i.getCode()); 
     } 
    } 
} 
OPEN 0 100 
CLOSE 1 101 
Các vấn đề liên quan