Enums
enum एक special type है जिसमें सिर्फ़ fixed constants define होते हैं — जैसे Day.MONDAY, Day.TUESDAY।
ये normal String/int से better है क्योंकि compiler ग़लत value use होने ही नहीं देता — सिर्फ़ वही options allowed हैं जो तुमने define किए।
enum Level { LOW, MEDIUM, HIGH }
Level l = Level.MEDIUM;
if (l == Level.MEDIUM) System.out.println("Medium level!");Enum sirf simple constants tak limited nahi — har constant ke apne fields aur constructor bhi ho sakte hain. Constructor hamesha private hota hai (implicitly), kyunki enum constants sirf declaration mein hi banti hain, bahar se "new" nahi kar sakte.
Classic example: Planet enum jisme har planet ka mass aur radius stored ho, aur gravity calculate karne ka method.
enum Planet {
MERCURY(3.3e23, 2.4e6), EARTH(5.9e24, 6.4e6);
final double mass, radius;
Planet(double mass, double radius) { this.mass = mass; this.radius = radius; }
}values() sab constants ka array deta hai (loop karne ke liye useful). ordinal() constant ki position (0 se) deta hai declaration order mein — lekin isse relying karna risky hai agar order badal jaaye future mein, isliye careful use karo. name() constant ka exact naam String mein deta hai. valueOf("RED") String se enum constant banata hai (agar naam match na kare to exception).
for (Level l : Level.values()) {
System.out.println(l.name() + " = " + l.ordinal());
}switch statement mein enum use karna bahut clean hota hai — case likhते waqt enum naam ke prefix (Level.) ki zaroorat nahi padti, aur saare possible values fixed hone ki wajah se code safe rehta hai (modern IDE bhi warn kar sakta hai agar koi case miss ho gaya).
Java special-purpose collections deta hai enums ke liye: EnumMap (key ke roop mein enum, HashMap se fast aur memory-efficient kyunki internally array-based hai) aur EnumSet (enum constants ka Set, bit-vector se implement hota hai internally, bahut fast operations). Jab bhi key/elements enum hon, ye normal HashMap/HashSet se better choice hain.