मुझे पता है कि यह प्रश्न कुछ साल पुराना है, लेकिन जैसा कि जावा 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);
}
}