Enumeration features:
◆ Type Safety)
◆ Compact, efficient declaration of enumerated values)
◆ Seamless interaction with other parts of the Program (seamless integration with other language features)
◆ Runtime Efficiency)
See http://www.51cto.com/specbook/11/32877.htm for details.
1. How to simulate enumeration using Java common classes
Import Java. util. hashmap; import Java. util. map;/*** simulate the day in the week, every day of every week indicates an object * 1. Each enumeration member in the class is an instance object of this class * 2. constructor privatization * 3. Provides abstract and static methods for operating enumeration members * @ author Yang Xin **/public abstract class weekdate {/*** Monday */public static final weekdate MON = new weekdate ("mon ", 0) {// anonymous subclass @ overridepublic weekdate nextday () {return Tues;} @ overridepublic weekdate preday () {return sun;} @ overridepublic string tostring () {return" Weekdate. mon ";}};/*** Tuesday */public static final weekdate Tues = new weekdate (" Tues ", 1) {@ overridepublic weekdate nextday () {return Wednes ;} @ overridepublic weekdate preday () {return mon ;}@ overridepublic string tostring () {return "weekdate. tues ";}};/***** weekdate */public static final weekdate Wednes = new weekdate (" Wednes ", 2) {@ overridepublic weekdate nextday () {return Thurs ;} @ overridepublic weekdate P Reday () {return Tues;} @ overridepublic string tostring () {return "weekdate. wednes ";}};/**** Thurs */public static final weekdate Thurs = new weekdate (" Thurs ", 3) {@ overridepublic weekdate nextday () {return Fri ;} @ overridepublic weekdate preday () {return Wednes;} @ overridepublic string tostring () {return "weekdate. thurs ";}};/*** Friday */public static final weekdate Fri = new weekdate (" fri ", 4) {@ overridepub LIC weekdate nextday () {return Satur ;}@ overridepublic weekdate preday () {return Thurs ;}@ overridepublic string tostring () {return "weekdate. fri ";}};/*** sat */public static final weekdate Satur = new weekdate (" Satur ", 5) {@ overridepublic weekdate nextday () {return sun ;} @ overridepublic weekdate preday () {return Fri ;}@ overridepublic string tostring () {return "weekdate. satur ";}};/*** Sunday */Public stat IC final weekdate sun = new weekdate ("sun", 6) {@ overridepublic weekdate nextday () {return mon ;}@ overridepublic weekdate preday () {return Satur ;} @ overridepublic string tostring () {return "weekdate. sun ";}}; Private Static Map <string, weekdate> valuemap = new hashmap <string, weekdate> ();/***** enumeration name */private final string name; /*** sequence of enumerative members */private final int ordinal; private weekdate (string name, int ORD Inal) {This. name = Name; this. ordinal = ordinal;}/*** Save the enumerated member */Private Static weekdate [] values = {Mon, Tues, Wednes, Thurs, Fri, Satur, Sun }; // initialize static {valuemap. put ("mon", values [0]); valuemap. put ("Tues", values [1]); valuemap. put ("Wednes", values [2]); valuemap. put ("Thurs", values [3]); valuemap. put ("fri", values [4]); valuemap. put ("Satur", values [5]); valuemap. put ("sun", values [6]);}/*** next day * @ return */pub LIC abstract weekdate nextday ();/*** previous day * @ return */public abstract weekdate preday (); /*** all members in the enumeration * @ return */public static weekdate [] values () {return values ;} /*** convert a string into an enumeration member object * @ Param name enumeration name * @ return enumeration object */public static weekdate valueof (string name) {If (name. repeated signorecase ("mon") {return mon;} else if (name. repeated signorecase ("Tues") {return Tues;} else if (name. equalsignorec ASE ("wedes") {return Wednes;} else if (name. inclusignorecase ("Thurs") {return Thurs;} else if (name. inclusignorecase ("fri") {return Fri;} else if (name. inclusignorecase ("Satur") {return Satur;} else if (name. equalsignorecase ("sun") {return sun;} else {Throw new illegalargumentexception ("not found" + name + "Enumeration type! ") ;}}/*** Optimized string to enumeration object * @ Param name enumeration name * @ return enumeration object */public static weekdate valueof_2 (string name) {weekdate value = valuemap. get (name. touppercase (); If (value = NULL) {Throw new illegalargumentexception ("not found" + name + "Enumeration type! ");} Return value;} Public String getname () {return name;} public int getordinal () {return ordinal ;} /*** @ return * Next day // * Public String nextday () {If (this = Mon) {return "Tues ";} else if (this = Tues) {return "Wednes";} else if (this = Wednes) {return "Thurs";} else if (this = Thurs) {return "fri";} else if (this = Fri) {return "Satur";} else if (this = Satur) {return "sun ";} else {return "mon" ;}} * // *** previous day * // * Public String preday () {If (this = Mon) {//....} else if (...)....} */}
2. Use the enumeration feature provided in jdk5.0 to improve the normal class enumeration simulation function.
/*** Enumerative Applications * store daily portions of a week */Public Enum weekdateenum {mon {@ overridepublic weekdateenum nextday () {return Tues;} @ overridepublic weekdateenum preday () {return sun ;}, Tues {@ overridepublic weekdateenum nextday () {return Wednes ;}@ overridepublic weekdateenum preday () {return mon ;}}, wednes {@ overridepublic today nextday () {return Thurs ;}@ overridepublic weekdateenum preday () {return Tues ;}, Thurs {@ overridepublic weekdateenum nextday () {return Fri ;} @ overridepublic weekdateenum preday () {return Wednes ;}}, Fri {@ overridepublic weekdateenum nextday () {return Satur ;}@ overridepublic weekdateenum preday () {return Thurs ;}}, satur {@ overridepublic weekdateenum nextday () {return Satur ;}@ overridepublic weekdateenum preday () {return Fri ;}, sun {@ overridepublic weekdateenum nextday () {return Satur ;} @ overridepublic weekdateenum preday () {return mon ;}}; private weekdateenum () {}/ *** next day * @ return */public abstract weekdateenum nextday (); /*** @ return */public abstract weekdateenum preday ();/*** enumerate the public tostring method of the object, you can feed back the information you want to return in the case block */Public String tostring () {Switch (this) {Case Mon: Return "weekdateenum. mon "; Case Tues: Return" weekdateenum. tues "; Case Wednes: Return" weekdateenum. wednes "; Case Thurs: Return" weekdateenum. thurs "; Case Fri: Return" weekdateenum. fri "; Case Satur: Return" weekdateenum. satur "; Case Sun: Return" weekdateenum. sun "; default: return NULL ;}}}
3. Enumeration function test
/*** Test the enumeration function */public class enumtest {public static void main (string [] ARGs) {// use the common Java class to simulate the enumeration application weekdate = weekdate. mon; // obtain an enumeration object // call the system method provided in enumeration. out. println (weekdate. nextday (); system. out. println (weekdate. preday (); system. out. println (weekdate. getname (); // obtain the Position System in the list of enumerated members. out. println (weekdate. getordinal (); // call the method system of an enumerated member. out. println (weekdate. values () [0]. preday (); system. out. println ("--------------- traverse enumeration members, common Java class simulation ------------------------"); For (weekdate weekdate2: weekdate. values () {system. out. println (weekdate2);} system. out. println ("\ n ====================================== =========================================\ N "); // use the enumeration feature in JDK to apply weekdateenum = weekdateenum. mon; // obtain an enumeration object system. out. println (weekdate. values (). length); // obtain the number of enumerated members: system. out. println (weekdateenum. name (); // obtain the enumerated string name system. out. println (weekdateenum. tostring (); // print the enumerated object. The tostring method has been rewritten. The enumerated name system is printed by default. out. println (weekdateenum. nextday (). ordinal (); // The location in the list of enumerated members: system. out. println (weekdateenum. valueof ("fri "). nextday (). ordinal (); system. out. println ("--------------- traverse enumeration members and use the enumeration feature of JDK -----------------------"); For (weekdateenum enumdemo: weekdateenum. values () {system. out. println (enumdemo );}}}
4. Test Results