按值查找枚举标签

时间:2013-09-19 10:29:14

标签: java android enums

我的java android应用程序中有以下枚举:

static enum PaymentType
{           
    Scheme(0), Topup(1), Normal(2), Free(3), Promotion(4), Discount(5), Partial(6),
    Refund(7), NoShow(8), Prepay(9), Customer(10), Return(11), Change(12), PettyCash(13),
    StateTax(14), LocalTax(15), Voucher(16), Membership(17), Gratuity(18), Overpayment(19),
    PrepayTime(20), HandlingFee(21);

    private int value;

    private PaymentType(int i) {
        value = i;
    }
    public int getValue() {
        return value;
    }
}

我使用这个枚举很多来找出其中一个字符串标签的整数值,例如int i = Lookups.PaymentType.Voucher.getValue();

我怎么能以相反的方式做到这一点?我有一个数据库的整数值,我需要找到与。

对应的字符串

2 个答案:

答案 0 :(得分:6)

你应该做这样的事情(static-init块应该在最后!在你的情况下只需用数字替换“asc”和“desc”,或者添加任何其他字段):

public enum SortOrder {
    ASC("asc"),
    DESC("desc");

    private static final HashMap<String, SortOrder> MAP = new HashMap<String, SortOrder>();

    private String value;

    private SortOrder(String value) {
        this.value = value;
    }

    public String getValue() {
        return this.value;
    }

    public static SortOrder getByName(String name) {
        return MAP.get(name);
    }

    static {
        for (SortOrder field : SortOrder.values()) {
            MAP.put(field.getValue(), field);
        }
    }
}

之后,请致电:

SortOrder asc = SortOrder.getByName("asc");

答案 1 :(得分:0)

ordinal()索引值返回到枚举:

type = PaymentType.values()[index];

但是,请记住,当序数存储在其他任何位置(例如数据库)时,这很脆弱。如果索引号发生变化,您将得到无效结果。

要获得更可靠的查找表,请使用Map。