การใช้ Class Enum – เขียนโปรแกรม Java

การใช้ Class Enum – เขียนโปรแกรม Java

บางครั้งในการเขียนโปรแกรมนั้นเราก็จำเป็นต้องใช้ ชนิดข้อมูลชนิด 1 ที่เรียกว่า Enum เพราะบ้างครั้งเราต้องการเก็บข้อความประโยคต่างๆ แต่เราไม่อยากทำเป็นค่าคงที่ ดังนั้นในภาษาโปรแกรมเกือบส่วนใหญ่จะมี Enum ให้ใช้ซึ่งในวันนี้ผมจะเอาตัวอย่างการใช้ Enum ของจาวามาฝากกันครับ

เริิ่มแรกผมก็ทำการสร้าง Project เพื่อทำการรันตัวอย่างนี้ใน eclipse โดยตั้งชื่อ Project ว่า ExEnum ดังรูป

การใช้ Class Enum - เขียนโปรแกรม Java

ต่อมาผมก็ทำการสร้าง Class Enum ที่ชื่อว่า WebName โดยใช้วิธีการคลิกขวาที่ folder src แล้วเลือก New -> Enum เหมือนในรูป

Untitled1

ต่อจากนั้นก็เขียนโค้ดดังนี้

[sourcecode language=”java”]
public enum WebName {

GOOGLE(“google.com”), HOTMAIL(“hotmail.com”)
,YAHOO(“yahoo.com”),YOUTUBE(“youtube.com”),
HTTP(80),HTTPS(443),SMTP(25);

private String nameAsString;
private int nameAsInt;

private WebName(String nameAsString)
{
this.nameAsString = nameAsString;
}

private WebName(int nameAsInt)
{
this.nameAsInt = nameAsInt;
}

//    @Override
public String toString() {

if(this.nameAsString != null)
return this.nameAsString;
else if(this.nameAsInt != 0)
return this.nameAsInt+””;
else
return “”;
}

}
[/sourcecode]

สังเกตว่าใน Class Enum WebName นั้นจะมีการกำหนดชื่อ Enum ต่างๆ เช่น GOOGLE, YAHOO โดยที่จะมีการกำหนด string ในวงเล็บด้านหลังเข้าไปซึ่งเราสามารถใช้วีธีนี้ได้ต้องทำการสร้าง construtor ที่เป็น private ของ Class Enum เพื่อกำหนดตัวแปร private ที่ใช้สำหรับจัดการค่าใน Class นี้คือ nameAsString

[sourcecode language=”java”]

private WebName(String nameAsString)
{
this.nameAsString = nameAsString;
}

[/sourcecode]

และถ้าเราจะเอาค่าข้อความต่างที่กำหนดให้ Enum ไปใช้นั้นเราต้องทำการ override method toString เพื่อ return ค่า nameAsString ออกไปซึ่งตัวแปร nameAsString เปรียบเหมือนตัวเชื่อมในการเก็บค่าข้อความใน Enum นอกจากนี้ในตัวอย่าง Class Enum WebName นั้นจะเห็นว่ามีการสร้าง Enum HTTP และ HTTPS ด้วยโดยค่าที่ใช้กำหนดกลับเป็น int ที่ที่ต้องทำการเขียนเพิ่มก็คือ construtor private ที่รับค่ามาเป็น int นั้นเองและต้องสร้างตัวแปร nameAsInt

[sourcecode language=”java”]

private WebName(int nameAsInt)
{
this.nameAsInt = nameAsInt;
}

[/sourcecode]

หลังจากที่ทำการเขียน Class Enum เสร็จแล้วก็มาทำการสร้าง class Main เพื่อทำการรันการใช้งาน class Enum นั้นเอง โดยขั้นตอนการทดสอบก็ไม่มีอะไรมาก็แค่ใช้ System.out.println เท่านั้น

Untitled2

สังเกตว่า auto complete ของ eclipse ก็ขึ้นมาให้เรียกว่าใช้งานสะดวกดีครับ โดยโค้ดใน Main.java ก็ไม่มีอะไรมากโดยมีโค้ดดังนี้

[sourcecode language=”java”]

public class Main {

public static void main(String args[])
{
System.out.println(WebName.GOOGLE);
System.out.println(WebName.HTTP);
}
}
[/sourcecode]

เมื่อลองรันโปรแกรมดูก็จะได้ผลลัพธ์ดังนี้

Untitled3

แต่หากลอง comment method toString ใน Class Enum WebName แล้วใช้โค้ด toString เดิมที่เป็น default toString ก็จะเห็นว่าผลลัพธ์ต่างออกไป

โดยมีโค้ดแบบนี้ครับ

[sourcecode language=”java”]
public String toString() {
return super.toString();
}
//    @Override
//    public String toString() {
//
//        if(this.nameAsString != null)
//            return this.nameAsString;
//        else if(this.nameAsInt != 0)
//            return this.nameAsInt+””;
//        else
//            return “”;
//    }

[/sourcecode]

Untitled4

ซึ่งสังเกต method toString ที่เรา Override ไว้นั้นจะทำการ return nameAsString ถ้าไม่มีค่าเป็น null หรือถ้าเป็น null ก็จะเช็คต่อว่าเป็นค่าชนิด int รึเปล่า ถ้าใช่ก็ return ตัวเลขที่แปลงเป็น string ออกมานั้นเอง

[sourcecode language=”java”]

//    @Override
public String toString() {

if(this.nameAsString != null)
return this.nameAsString;
else if(this.nameAsInt != 0)
return this.nameAsInt+””;
else
return “”;
}

[/sourcecode]

ก็จะได้ชื่อของ Enum นั้นเอง เรียกว่าการใช้ Class Enum นั้นยืดหยุ่นพอสมควรให้เราเลือกใช้งานว่าจะใช้เป็น Enum ธรรมดาหรือจะกำหนดค่าต่างลงไปใน Enum แล้วทำการ Override toString เพื่อแสดงผลตามที่เราต้องการ

สรุป step ในการใช้งาน Class Enum

  1. สร้าง class enum ขึ้นมาแล้วออกแบบว่าจะเอาข้อมูลชนิดในเก็บใน enum
  2. สร้างตัวแปร private และ private construtor ให้เข้ากับชนิดข้อมูลที่จะเก็บใน enum
  3. ทำการ override method toString ของ class enum เพื่อเวลาแสดงค่าจะเป็นไปตามที่เราต้องการ

Download Source Code

Leave a Reply

Your email address will not be published. Required fields are marked *