February 19, 2014

Enumerations

Java SE 5 အရောက်တွင် Reference Type နှစ်မျိုးအား Java ဘာသာရပ်တွင် အသစ်ဖြည့်စွက်ခဲ့ပါသည်။ တစ်မျိုးမှာ class ပုံစံ အသစ်တစ်မျိုးဖြစ်ပြီး enumeration ဖြစ်ပြီး၊ နောက်တစ်မျိုးမှာ interface ပုံစံအသစ် တစ်မျိုးဖြစ်ပြီး annotation ဖြစ်ပါသည်။

Enumeration


ကြိုတင်သတ်မှတ်ထားသော တန်ဖိုးအစုအဝေးအား ကိန်းသေအဖြစ် အသုံးပြုလိုသည့် အခါမျိုးတွင် enumeration အား အသုံးပြုနိုင်ပါသည်။ Enumeration များတွင် အသုံးပြုနေသော အမျိုးအစားများအား enum type ဟု ခေါ်ဆို ကြပါသည်။ ဥပမာအားဖြင့် ရက်သတပါတ် အတွင်းရှိ နေ့အမျိုးအစားများ၊ ဆက်နှစ်လရာသီ အစရှိသည့် မပြောင်းလည်းသည့် တန်ဖိုးများအား အသုံးပြုလိုသည့်အခါတွင် enum type အား အသုံးပြုနိုင်ပါသည်။

လက်တွေ့မှာမူ Enumerations များအား Constants များအနေနှင့် အသုံးပြုနေသည့်အပြင်၊ Singlaton Pattern များအား ရေးသားရာတွင်လည်း အသုံးပြုကြပါသည်။


Before Enumeration


public class EnumMain {
    
    public static interface Day {
        public static final int MON = 1, 
                TUE = 2, 
                WED = 3, 
                THU = 4, 
                FRI = 5, 
                SAT = 6, 
                SUN = 7;
    }
    
    public static void main(String[] args) {
        int day = Day.MON;
        // can assign other value 
        day = 10;
        // print it's int value not name
        System.out.println(day);
    }
}
Eunmeration များ မပေါ်ပေါက်ခင်ကာလတွင် Constants များအား အသုံးပြုလိုပါက၊ static final variable များအား အသုံးပြုခဲ့ကြရ၏။ အထက်ပါ နမှုနာတွင် နေ့ အတွက် day variable အား အသုံးပြု၍၊ ၎င်း၏ တန်ဖိုးများအဖြစ် static final variable များအား အသုံးပြုခဲ့ကြ၏။ ဤကဲ့သို့ အသုံးပြုရာတွင် day ၏တန်ဖိုးမှာ int ဖြစ်သောကြောင့်၊ သတ်မှတ် ထားသော တန်ဖိုးများအပြင် အခြားသော int တန်ဖိုးများအားလည်း အစားထိုး အသုံးပြုနိုင်၏။ ထို့ကြောင့် အမျိုးအစား အနေနှင့် လုံခြုံစိတ်ချရမှု့ မရှိပါ။

တဖန် System.out.println အား အသုံးပြု၍ ဖော်ပြရာတွင်လည်း၊ နေ့ရက်အမျိုးအစားအား ဖော်ပြခြင်း မရှိပဲ int ၏ တန်ဖိုးကိုသာ ဖော်ပြမည်ဖြစ်သည်။

Using Enumeration


အထက်ပါ အစဉ်မပြေမှု့များအား Enumeration အား အသုံးပြု၍ ဖြေရှင်းနိုင်မည် ဖြစ်ပါသည်။
public class EnumMain {
    
    public enum Day {
        MON, TUE, WED, THU, FRI, SAT, SUN;
    }
    
    public static void main(String[] args) {
        Day day = Day.MON;
        // print it's name
        System.out.println(day.toString());
    }
}

Enumeration အား အသုံးပြုရန် enum keyword အား အသုံးပြုနိုင်ပြီး၊ ပါဝင်သော element များအား ကော်မာခံ၍ ရေးသားရပါသည်။ enum type variable အားအသုံးပြုခြင်းအားဖြင့်၊ enum အတွင်း ရေးသားထားသော တန်ဖိုးများ အပြင် အခြားသောတန်ဖိုးအား အစားထိုး အသုံးချနိုင်တော့မည် မဟုတ်။

ထို့အပြင် enum type ၏ toString method အား အသုံးပြုပါက၊ ၎င်း၏ အမည်အား ဖော်ပြအသုံးပြုနိုင်မည် ဖြစ်ပါသည်။ Enumeration များအား switch controls statement အတွင်း အသုံးပြုနိုင်ပြီး ၎င်းတို့အား နှိုင်းယှဉ်ရာတွင် == အား အသုံးပြုနိုင်ပါသည်။

Enumeration များအား တစ်ကြိမ်တည်ဆောက်ပြီးပါက static final အနေနှင့် ပြောင်းလည်းပေးသောကြောင့်၊ enum element တစ်ခုအား အခြားသော တန်ဖိုးတစ်ခုနှင့် အစားထိုးအသုံးပြုနိုင်ခြင်း မရှိပါ။ ထို့အပြင် enum များသည် Thread Safe ဖြစ်သောကြောင့်၊ ၎င်းတို့၏ ထူးခြားချက်အား အသုံးပြု၍ Singlaton Pattern များအား ရေးသားရာတွင်လည်း အသုံးပြုလေ့ရှိပါသည်။ Enumeration အား အသုံးပြု၍ Singlaton Pattern အား ရေးသားနည်း အား နောက်အခန်းများတွင် ဆက်လက်ဖော်ပြသွားပါဦးမည်။


Other Usage of Enumeration


Enumeration များအား C နှင့် C++ ဘာသာရပ်တို့တွင် စတင် အသုံးပြုခဲ့ပြီး၊ Java ဘာသာရပ်တွင်မှု Java SE 5 အရောက်မှ စတင် အသုံးပြုလာနိုင်ခဲ့ပါသည်။ သို့ရာတွင် Java တွင် အသုံးပြုနေသော Enumeration များသည် သာမန် Constants အနေနှင့် အသုံးပြုနိုင်သည့် အပြင် OOP ၏ ထူးခြားချက်များကိုလည်း အပြည့်အဝ အသုံးပြုနိုင်၏။



Using Values and Overriding Method


public enum MyanmarKyat {
    
    ONE(1), FIVE(5), TEN(10), FIFTY(50), 
    HUNDRED(100), TWO_HUNDRED(200), FIVE_HUNDRED(5000),
    THOUSAND(1000), FIVE_THOUSAND(5000), TEN_THOUSAND(10000);
    
    private int value;
    
    private MyanmarKyat(int value) {
        this.value = value;
    }
    
    public int getValue() {
        return value;
    }

    @Override
    public String toString() {
        String res = "";
        String [] strs = super.toString().split("_");
        for(String str : strs) {
            res += str.toLowerCase();
            res += " ";
        }
        res += "kyat";
        return res;
    }
}

Enumeration တစ်ခုတွင် တန်ဖိုးများအားလည်း၊ ထည့်သွင်း အသုံးပြုနိုင်ပြီး၊ အသုံးပြုနိုင်ရန်မှာ private member အဖြစ် ကြိုတင်သတ်မှတ်ထားရန်လိုအပ်ပြီး၊ ၎င်းတန်ဖိုးများအား parameter အဖြစ် ရယူထားသော private constructor ကိုလည်း ရေးသားထားရန် လိုအပ်ပါသည်။

ထို့အပြင် ၎င်းတန်ဖိုးများအား အသုံးပြုထားသော Method များကိုလည်း ရေးသား အသုံးပြုနိုင်ပြီး အထက်တွင် ဖော်ပြထားသကဲ့သို့ toString method ကိုလည်း Override လုပ်၍ ရေးသားနိုင်ပါသည်။



Abstract Method of Enumeration


public enum DataType {
    
    TYPE_ONE {
        @Override
        public String doSomething() {
            return "from type one";
        }
    }, TYPE_TWO {
        @Override
        public String doSomething() {
            return "from type two";
        }
    };
    
    public abstract String doSomething();

}

အခြားသော Class များကဲ့သို့ပင် Enumertion များ၌၊ abstract method များအား ရေးသား အသုံးပြုနိုင်ပါသည်။ Abstract Method များအား ရေးသား အသုံးပြုထားပါက၊ ၎င်းတို့၏ Element များအတွင်းတွင် အဆိုပါ Method များအား Override လုပ်၍ ရေးသားရန် လိုအပ်ပါသည်။ Abstract Method အား အသုံးပြုခြင်းအားဖြင့်၊ Enumeration ၏ Element များအား မတူညီသော လုပ်ဆောင်ချက်များအား ပြုလုပ်စေနိုင်ပါသည်။

ဆက်ပါဦးမည်၊ လေးစားစွာဖြင့်။
မင်းလွင်

10 comments:

  1. Thank you for the good writeup. It in fact was a
    amusement account it. Look advanced to far added agreeable from
    you! However, how could we communicate?

    ReplyDelete
  2. With havin so much content do you ever run into any problems
    of plagorism or copyright violation? My site
    has a lot of unique content I've either created myself
    or outsourced but it appears a lot of it is popping it up
    all over the internet without my agreement. Do you
    know any methods to help protect against content from being stolen? I'd definitely appreciate it.

    ReplyDelete
  3. Do you mind if I quote a couple of your posts as
    long as I provide credit and sources back to your
    weblog? My website is in the exact same area of interest as yours
    and my users would genuinely benefit from a lot of the information you present here.
    Please let me know if this ok with you. Many thanks!

    ReplyDelete
  4. My partner and I stumbled over here by a different web
    page and thought I might as well check things out.
    I like what I see so i am just following you. Look forward
    to exploring your web page repeatedly.

    ReplyDelete
  5. Hello there, I discovered your site via Google even as looking for a comparable matter, your website came up, it appears to
    be like good. I have bookmarked it in my google bookmarks.

    Hi there, just was aware of your weblog via Google, and found that it is really
    informative. I am gonna be careful for brussels.
    I'll be grateful in case you proceed this in future.
    Numerous folks will be benefited from your writing.
    Cheers!

    ReplyDelete
  6. Hey! Would you mind if I share your blog with my twitter
    group? There's a lot of people that I think would really
    enjoy your content. Please let me know. Thank you

    ReplyDelete
  7. Hi there, i read your blog from time to time and
    i own a similar one and i was just curious if you get
    a lot of spam feedback? If so how do you stop it, any plugin or anything you can recommend?
    I get so much lately it's driving me insane so any support is very much appreciated.

    ReplyDelete
  8. This post will help the internet visitors for setting up new weblog or even a blog
    from start to end.

    ReplyDelete
  9. Hey There. I found your blog using msn. This is a very well written article.
    I'll make sure to bookmark it and return to read more of your useful information. Thanks for the post.
    I'll definitely return.

    ReplyDelete
  10. Hi there it's me, I am also visiting this web site regularly, this
    website is in fact nice and the users are really
    sharing pleasant thoughts.

    ReplyDelete