Java enumeration (using Java common classes to simulate enumeration implementation and JDK enumeration API use examples)

Source: Internet
Author: User

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

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.