Bu sorunun birkaç yıllık olduğunu biliyorum, ancak bu arada Java 8 bize getirdiği için Optional, onu kullanarak bir çözüm sunabileceğimi düşündüm ( Streamve 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şuna benzer null: (geçerli) değer olmadığında bir durumu temsil eder. Ancak bu, veya vakalarını kontrol etmeyi unutabileceğiniz için daha güvenli bir alternatif nullveya varsayılan bir değerdir . İkisi de geçerli değerlerdir! Bunun aksine, bir tür değişkenine bir değer atayamazsınız . önce geçerli bir değeri kontrol etmenizi sağlar.DLT_UNKNOWNnullDLT_UNKNOWNPcapLinkTypeOptional<PcapLinkType>PcapLinkTypeOptional
Elbette, DLT_UNKNOWNgeriye dönük uyumluluk veya başka bir nedenle korumak istiyorsanız, Optionalbu durumda bile, orElse()bunu varsayılan değer olarak belirtmek için kullanabilirsiniz:
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);
}
}