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 များအား မတူညီသော လုပ်ဆောင်ချက်များအား ပြုလုပ်စေနိုင်ပါသည်။

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

No comments:

Post a Comment