2011-05-28 27 views
6

Có cách nào tốt hơn của việc tạo ra các mảng từ các yếu tố của một enum:Java: Bắt một loạt các yếu tố ENUM

public static enum LOGICAL { 
     AND ("&", "AND"), 
     OR ("||", "OR"); 

     public final String symbol; 
     public final String label; 

     LOGICAL(String symbol, String label) { 
      this.symbol=symbol; 
      this.label=label; 
     } 
    } 

    public static final String[] LOGICAL_NAMES = new String[LOGICAL.values().length]; 
    static{ 
     for(int i=0; i<LOGICAL.values().length; i++) 
      LOGICAL_NAMES[i]=LOGICAL.values()[i].symbol; 
    } 

    public static final String[] LOGICAL_LABELS = new String[LOGICAL.values().length]; 
    static{ 
     for(int i=0; i<LOGICAL.values().length; i++) 
      LOGICAL_LABELS[i]=LOGICAL.values()[i].label; 
    } 

Trả lời

2

số đó có vẻ một cách thích hợp. Thậm chí nếu có một số tiện ích, nó sẽ dựa vào phản ánh

Nếu bạn đang sử dụng nó thường xuyên cache nó trong enum

+0

Xin giải thích những gì bạn có ý nghĩa bởi "bộ nhớ đệm". Di chuyển các mảng tĩnh vào cơ thể enum? – marcolopes

+0

Lưu trữ nó trong một trường để bạn không tính toán mọi lúc – Bozho

+1

Tôi đã tin rằng mã này sẽ chỉ chạy ONCE (trên truy cập đầu tiên vào lớp). – marcolopes

3

Cá nhân tôi sẽ không tiếp xúc với chúng như một mảng, mà nội dung có thể được thay đổi bởi bất cứ ai. Tôi có thể sử dụng một danh sách unmodifiable thay vì - và có lẽ phơi bày rằng thông qua một tài sản chứ không phải là một lĩnh vực. Việc khởi sẽ là một cái gì đó như thế này: (. Nếu bạn đã sử dụng Guava thậm chí bạn có thể muốn sử dụng ImmutableList thay vào đó, và phơi bày những bộ sưu tập theo cách đó để làm cho nó rõ ràng rằng họ bất biến)

private static final List<String> labels; 
private static final List<String> values; 

static 
{ 
    List<String> mutableLabels = new ArrayList<String>(); 
    List<String> mutableValues = new ArrayList<String>(); 
    for (LOGICAL x : LOGICAL.values()) 
    { 
     mutableLabels.add(x.label); 
     mutableValues.add(x.value); 
    } 
    labels = Collections.unmodifiableList(mutableLabels); 
    values = Collections.unmodifiableList(mutableValues); 
} 

+0

Có! Tôi ước có một ImmutableList trong Java API chuẩn. – Alvin

2

Nếu bạn sử dụng các giá trị của mình rất thường xuyên và liệt kê của bạn sẽ sử dụng Maps nhiều hơn. Khai báo những điều sau đây trong lớp học của bạn.

private static EnumMap<LOGICAL,String> symbols = new EnumMap<LOGICAL, String>(LOGICAL.class); 

và sau đó ngay dưới nó:

static{ 
    for(LOGICAL i : LOGICAL.values().) 
     symbols.put(i, i.symbol); 
} 

sau đó bạn có thể sử dụng symbols.values() hoặc symbols.get(LOGICAL.AND), vv

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