Sé que esta pregunta tiene algunos años, pero como Java 8, mientras tanto, nos trajo Optional, pensé en ofrecer una solución usándola (y Streamy 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));
}
}
Optionales como null: representa un caso en el que no hay ningún valor (válido). Pero es una alternativa más segura para los tipos nullo un valor predeterminado, por ejemplo, DLT_UNKNOWNporque podría olvidarse de verificar los casos nullo DLT_UNKNOWN. ¡Ambos son PcapLinkTypevalores válidos ! Por el contrario, no puede asignar un Optional<PcapLinkType>valor a una variable de tipo PcapLinkType.Optionalle hace comprobar primero un valor válido.
Por supuesto, si desea conservar DLT_UNKNOWNpara compatibilidad con versiones anteriores o cualquier otra razón, aún puede usar Optionalincluso en ese caso, usando orElse()para especificarlo como el valor predeterminado:
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);
}
}