私はこの質問が数年前のものであることを知っていますが、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
DLT_UNKNOWN
PcapLinkType
Optional<PcapLinkType>
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);
}
}