我知道这个问题已有几年历史了,但是与此同时,由于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
因为您可能忘记检查null
orDLT_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);
}
}