หน้าเว็บ

วันอังคารที่ 4 กันยายน พ.ศ. 2555

Java Enumeration

        ในภาษา java developer สามารถกำหนดตัวแปรขึ้นมาใช้งานเองได้  โดยไม่จำเป็นต้องใช้ชนิดตัวแปรพื้นฐาน (primitive data type) ตัวแปรแบบนี้เราเรียกว่า Enumeration  ซึ่งจากตัวอย่าง เป็น Enumeration ของวันต่างๆครับ
วิธีใช้งาน
...
...
List<Days> days = new ArrayList<Days>();
days.add(Days.SUNDAY);
days.add(Days.MONDAY);
days.add(Days.WEDNESDAY);

System.out.println(Days.SUNDAY);
// => SUNDAY
System.out.println(Days.SUNDAY.getShortName());
// => อา.
System.out.println(Days.SUNDAY.getFullName());
// => อาทิตย์
System.out.println(Days.indexOfValue(Days.SUNDAY));
// => 0
System.out.println(Days.stringToList("SUNDAY,MONDAY,WEDNESDAY", ","));
// => [{SUNDAY, MONDAY, WEDNESDAY}]
System.out.println(Days.listToString(days, ","));
// => "SUNDAY,MONDAY,WEDNESDAY"
System.out.println(Days.valueOfIndex(6));
// => FRIDAY
System.out.println(Days.stringToArrayInteger("SUNDAY,MONDAY,WEDNESDAY", ","));
// => [0, 1, 3]
...
...
Code
package com.blogspot.na5cent.library;

import com.google.common.base.Joiner;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *
 * @author redcrow
 */
//modifier จะขึ้นต้นด้วย enum
public enum Days {

    //(1)
    //กำหนดค่าให้กับ Days  ผ่าน Constructor
    SUNDAY("อา.", "อาทิตย์"),
    MONDAY("จ.", "จันทร์"),
    TUESDAY("อ.", "อังคาร"),
    WEDNESDAY("พ.", "พุธ"),
    THURSDAY("พฤ.", "พฤหัสบดี"),
    FRIDAY("ศ.", "ศุกร์"),
    SATURDAY("ส.", "เสาร์");

    //log
    static final Logger LOG = LoggerFactory.getLogger(Days.class);

    private String shortName;
    private String fullName;

    //สร้าง Constructor เพื่อกำหนดค่า ที่ (1)
    private Days(String shortName, String fullName) {
        this.shortName = shortName;
        this.fullName = fullName;
    }

    public String getShortName() {
        return shortName;
    }

    public String getFullName() {
        return fullName;
    }

    //แปลง String ไปเป็น List ของ Days 
    //เช่น "SUNDAY,MONDAY,WEDNESDAY" => [{SUNDAY, MONDAY, WEDNESDAY}]
    public static List<Days> stringToList(String daysString, String splitor) {

        List<Days> daylist = new ArrayList<Days>();
        //ใช้ StringUtils ของ Apache commons มาช่วยแยก String เนื่องจากถ้าเราใช้ split  ธรรมดา  มันอาจจะได้ String ว่างมาด้วย เช่น "One,Two,Three," => "One", "Two", "Three", ""
        String[] days = StringUtils.split(daysString, splitor);
        for (String day : days) {
            try {
                daylist.add(Days.valueOf(day));
            } catch (Exception e) {
                LOG.debug("error {}", e);
            }
        }
        return daylist;
    }
    
    //แปลงจาก String ไปเป็น Array of Integer "SUNDAY,MONDAY,WEDNESDAY" => [0, 1, 3]
    public static Integer[] stringToArrayInteger(String daysString, String splitor)    
    {
        String[] days = StringUtils.split(daysString, splitor);
        Integer[] dayArray = new Integer[days.length];
        for (int i = 0; i < days.length; i++) {
            dayArray[i] = indexOfValue(days[i]);
        }

        return dayArray;
    }

    //แปลงจาก List ไปเป็น String[{SUNDAY, MONDAY, WEDNESDAY}] => "SUNDAY,MONDAY,WEDNESDAY"
    public static String listToString(List<Days> daysList, String joiner) {
        String result = Joiner.on(joiner).join(daysList);
        LOG.debug("list to string {}", result);
        return result;
    }

    public static Days valueOfIndex(int index) {
        //คือ get ค่าที่ (1) ข้างบนสุด
        //ในตัวแปรแบบ Enum นั้นตัวแปรทั้งหมดจะถูกมองเป็น Array ตัวแรกคือ Array 0
        Days days = Days.values()[index];
        LOG.debug("day {}", days);
        return days;
    }

    //แปลงจาก enum ไปเป็น index
    public static int indexOfValue(Days day) {
        for (int i = 0; i < Days.values().length; i++) {
            if (Days.values()[i].equals(day)) {
                return i;
            }
        }
        return -1;
    }

    //แปลงจาก String ไปเป็น index
    public static int indexOfValue(String day) {
        for (int i = 0; i < Days.values().length; i++) {
            if (Days.values()[i].toString().equals(day)) {
                return i;
            }
        }
        return -1;
    }
}

ไม่มีความคิดเห็น:

แสดงความคิดเห็น