java 枚举与数字转换_将整数值转换为匹配的Java Enum

问题

我有这样的枚举:

public enum PcapLinkType {

DLT_NULL(0)

DLT_EN10MB(1)

DLT_EN3MB(2),

DLT_AX25(3),

/*snip, 200 more enums, not always consecutive.*/

DLT_UNKNOWN(-1);

private final int value;

PcapLinkType(int value) {

this.value= value;

}

}

现在我从外部输入得到一个int并想要匹配的输入 - 如果一个值不存在则抛出一个异常是好的,但最好是在那种情况下我有它是DLT_UNKNOWN。

int val = in.readInt();

PcapLinkType type = ???; /*convert val to a PcapLinkType */

#1 热门回答(94 赞)

你需要手动执行此操作,方法是在将整数映射到枚举的类中添加静态映射,例如

private static final Map intToTypeMap = new HashMap();

static {

for (PcapLinkType type : PcapLinkType.values()) {

intToTypeMap.put(type.value, type);

}

}

public static PcapLinkType fromInt(int i) {

PcapLinkType type = intToTypeMap.get(Integer.valueOf(i));

if (type == null)

return PcapLinkType.DLT_UNKNOWN;

return type;

}

#2 热门回答(30 赞)

enum MyEnum {

FIRST, SECOND, THIRD;

private static MyEnum[] allValues = values();

public static MyEnum fromOrdinal(int n) {return allValues[n];}

}

原则上,你可以使用justvalues()[i],但有传言称values()每次调用时都会创建一个数组副本。

#3 热门回答(14 赞)

你必须创建一个新的静态方法,迭代PcapLinkType.values()并比较:

public static PcapLinkType forCode(int code) {

for (PcapLinkType typе : PcapLinkType.values()) {

if (type.getValue() == code) {

return type;

}

}

return null;

}

如果它很少被调用那就没问题。如果经常调用它,那么请查看其他人建议的Map优化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值