我知道这个问题已有几年历史了,但是与此同时,由于Java 8带来了我们Optional,我想我会提供一个使用它(和Stream和Collectors)的解决方案:
public enum PcapLinkType {
DLT_NULL(0),
DLT_EN3MB(2),
DLT_AX25(3),
private final int value;
private PcapLinkType(int value) { this.value = value; }
private static final Map<Integer, PcapLinkType> map;
static {
map = Arrays.stream(values())
.collect(Collectors.toMap(e -> e.value, e -> e));
}
public static Optional<PcapLinkType> fromInt(int value) {
return Optional.ofNullable(map.get(value));
}
}
Optional就像null:表示没有(有效)值的情况。但这是类型安全的替代方法null或默认值,例如,DLT_UNKNOWN因为您可能忘记检查nullorDLT_UNKNOWN情况。它们都是有效值PcapLinkType!相反,您不能将Optional<PcapLinkType>值赋给type变量PcapLinkType。Optional使您首先检查有效值。
当然要保留 DLT_UNKNOWN出于向后兼容性或其他原因,Optional即使在这种情况下,仍可以使用orElse()将其指定为默认值:
public enum PcapLinkType {
DLT_NULL(0),
DLT_EN3MB(2),
DLT_AX25(3),
DLT_UNKNOWN(-1);
private final int value;
private PcapLinkType(int value) { this.value = value; }
private static final Map<Integer, PcapLinkType> map;
static {
map = Arrays.stream(values())
.collect(Collectors.toMap(e -> e.value, e -> e));
}
public static PcapLinkType fromInt(int value) {
return Optional.ofNullable(map.get(value)).orElse(DLT_UNKNOWN);
}
}