首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java中如何从索引中获取枚举值?

在Java中如何从索引中获取枚举值?
EN

Stack Overflow用户
提问于 2011-07-14 19:49:34
回答 4查看 166K关注 0票数 103

我在Java中有一个枚举:

代码语言:javascript
复制
public enum Months
{
    JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
}

我想按索引访问枚举值,例如

代码语言:javascript
复制
Months(1) = JAN;
Months(2) = FEB;
...

我该怎么做呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-14 19:53:29

尝尝这个

代码语言:javascript
复制
Months.values()[index]
票数 250
EN

Stack Overflow用户

发布于 2011-07-14 20:01:22

这里有三种方法。

代码语言:javascript
复制
public enum Months {
    JAN(1), FEB(2), MAR(3), APR(4), MAY(5), JUN(6), JUL(7), AUG(8), SEP(9), OCT(10), NOV(11), DEC(12);


    int monthOrdinal = 0;

    Months(int ord) {
        this.monthOrdinal = ord;
    }

    public static Months byOrdinal2ndWay(int ord) {
        return Months.values()[ord-1]; // less safe
    }

    public static Months byOrdinal(int ord) {
        for (Months m : Months.values()) {
            if (m.monthOrdinal == ord) {
                return m;
            }
        }
        return null;
    }
    public static Months[] MONTHS_INDEXED = new Months[] { null, JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC };

}




import static junit.framework.Assert.assertEquals;

import org.junit.Test;

public class MonthsTest {

@Test
public void test_indexed_access() {
    assertEquals(Months.MONTHS_INDEXED[1], Months.JAN);
    assertEquals(Months.MONTHS_INDEXED[2], Months.FEB);

    assertEquals(Months.byOrdinal(1), Months.JAN);
    assertEquals(Months.byOrdinal(2), Months.FEB);


    assertEquals(Months.byOrdinal2ndWay(1), Months.JAN);
    assertEquals(Months.byOrdinal2ndWay(2), Months.FEB);
}

}
票数 20
EN

Stack Overflow用户

发布于 2018-02-14 16:57:18

我只是尝试了同样的方法,并提出了以下解决方案:

代码语言:javascript
复制
public enum Countries {
    TEXAS,
    FLORIDA,
    OKLAHOMA,
    KENTUCKY;

    private static Countries[] list = Countries.values();

    public static Countries getCountry(int i) {
        return list[i];
    }

    public static int listGetLastIndex() {
        return list.length - 1;
    }
}

该类将自己的值保存在一个数组中,我使用该数组来获取indexposition处的枚举。如上所述,数组从0开始计数,如果您希望索引从'1‘开始,只需将这两个方法更改为:

代码语言:javascript
复制
public static String getCountry(int i) {
    return list[(i - 1)];
}

public static int listGetLastIndex() {
    return list.length;
}

在我的Main中,我使用以下命令获取所需的countries object

代码语言:javascript
复制
public static void main(String[] args) {
   int i = Countries.listGetLastIndex();
   Countries currCountry = Countries.getCountry(i);
}

它将currCountry设置为最后一个国家/地区,在本例中为Countries.KENTUCKY。

请记住,如果您使用硬编码的索引来获取对象,则此代码会受到ArrayOutOfBoundsExceptions的严重影响。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6692664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档