Saya tahu pertanyaan ini berumur beberapa tahun, tetapi karena Java 8, sementara itu, membawa kami Optional, saya pikir saya akan menawarkan solusi menggunakannya ( Streamdan 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));
}
}
Optionaladalah seperti null: ini mewakili kasus ketika tidak ada nilai (valid). Tetapi ini adalah alternatif yang lebih aman untuk nulltipe atau nilai default seperti DLT_UNKNOWNkarena Anda bisa lupa untuk memeriksa kasus nullatau DLT_UNKNOWN. Keduanya adalah PcapLinkTypenilai yang valid ! Sebaliknya, Anda tidak dapat menetapkan Optional<PcapLinkType>nilai ke variabel tipe PcapLinkType.Optionalmembuat Anda memeriksa nilai yang valid terlebih dahulu.
Tentu saja, jika Anda ingin mempertahankan DLT_UNKNOWNkompatibilitas mundur atau alasan lain apa pun, Anda masih dapat menggunakan Optionalbahkan dalam kasus itu, menggunakan orElse()untuk menetapkannya sebagai nilai default:
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);
}
}