दिया हुआ:
public enum PersonType {
COOL_GUY(1),
JERK(2);
private final int typeId;
private PersonType(int typeId) {
this.typeId = typeId;
}
public final int getTypeId() {
return typeId;
}
public static PersonType findByTypeId(int typeId) {
for (PersonType type : values()) {
if (type.typeId == typeId) {
return type;
}
}
return null;
}
}
मेरे लिए, यह आम तौर पर एक डेटाबेस में लुक-अप तालिका के साथ संरेखित होता है (केवल शायद ही-अपडेट की गई तालिकाओं के लिए)।
हालांकि, जब मैं findByTypeId
एक स्विच स्टेटमेंट (सबसे अधिक संभावना, उपयोगकर्ता इनपुट) से उपयोग करने का प्रयास करता हूं ...
int userInput = 3;
PersonType personType = PersonType.findByTypeId(userInput);
switch(personType) {
case COOL_GUY:
// Do things only a cool guy would do.
break;
case JERK:
// Push back. Don't enable him.
break;
default:
// I don't know or care what to do with this mess.
}
... जैसा कि दूसरों ने कहा है, इसका परिणाम NPE @ है switch(personType) {
। एक काम के आसपास (यानी, "समाधान") मैंने लागू करना शुरू कर दिया एक UNKNOWN(-1)
प्रकार जोड़ना था ।
public enum PersonType {
UNKNOWN(-1),
COOL_GUY(1),
JERK(2);
...
public static PersonType findByTypeId(int id) {
...
return UNKNOWN;
}
}
अब, आपको अशक्त-जाँच करने की आवश्यकता नहीं है कि यह कहाँ गिना जाता है और आप UNKNOWN
प्रकारों को संभाल सकते हैं या नहीं, चुन सकते हैं । (नोट: -1
व्यावसायिक परिदृश्य में एक असंभावित पहचानकर्ता है, लेकिन स्पष्ट रूप से कुछ ऐसा चुनें जो आपके उपयोग-मामले के लिए समझ में आता है)।