So che questa domanda è vecchia di alcuni anni, ma poiché Java 8, nel frattempo, ci ha portato Optional, ho pensato di offrire una soluzione utilizzandolo (e Streame 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è come null: rappresenta un caso in cui non c'è un valore (valido). Ma è un'alternativa più indipendente dai tipi nullo un valore predefinito, ad esempio DLT_UNKNOWNperché potresti dimenticare di controllare i casi nullo DLT_UNKNOWN. Sono entrambi PcapLinkTypevalori validi ! Al contrario, non è possibile assegnare un Optional<PcapLinkType>valore a una variabile di tipo PcapLinkType. Optionalti fa verificare prima un valore valido.
Ovviamente, se vuoi conservare DLT_UNKNOWNper compatibilità con le versioni precedenti o qualsiasi altra ragione, puoi comunque usare Optionalanche in quel caso, usando orElse()per specificarlo come valore predefinito:
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);
}
}