java - 将整数值转换为匹配的 Java 枚举

标签 java

我有一个这样的枚举:

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 */

最佳答案

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

private static final Map<Integer, PcapLinkType> intToTypeMap = new HashMap<Integer, PcapLinkType>();
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;
}

关于java - 将整数值转换为匹配的 Java 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5292790/

相关文章:

java - Tess4j 问题 java.lang.UnsatisfiedLinkError

java - 如何将字符串值拆分为多个值

Java删除对象

java - 如何创建一个 Whatsapp 按钮来向我的 Android 应用程序中的特定联系人发送消息?

Java 7 NIO watchservice 与 jpathwatch

java - 仅在 Java 1.8.0_45 中出现 ConcurrentModificationException

java - 对对象图中的孤立对象进行单元测试

工作页面上的 Java HtmlUnit 301 状态代码

java - ArrayList 项和 hibernate 的问题

java - 线程池中的awaitTermination不会终止线程池