Java:获取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;
    }
    
已邀请:
        不,这似乎是正确的方法。即使有一些效用,也要依靠反思 如果使用它,通常将其缓存在枚举中     
        我个人不会将它们公开为数组,任何人都可以更改其内容。我可能会改用不可修改的列表-并可能通过属性而不是作为字段来公开该列表。初始化将是这样的:
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);
}
(如果您已经在使用番石榴,则可能甚至要改用
ImmutableList
,并以这种方式公开这些集合,以明确它们是不可变的。)     
        如果您经常使用值,并且枚举越来越大,请使用地图。在课堂上声明以下内容。
private static EnumMap<LOGICAL,String> symbols = new EnumMap<LOGICAL, String>(LOGICAL.class);
然后就在它下面:
static{
    for(LOGICAL i : LOGICAL.values().)
        symbols.put(i, i.symbol);
}
那么您可以使用
symbols.values()
symbols.get(LOGICAL.AND)
等。     

要回复问题请先登录注册