จาวาโปรแกรมมิ่ง - Enumeration




enum มีลักษณะคล้ายกับ class หรือ interface และ enum จะแสดงค่า FIXED values (คล้ายกับ constant) ตัวอย่างเช่น 


1
2
3
public enum Resolution {
	HIGH, MEDIUM, LOW
}


ถ้าหากว่าเรากำหนดเมธอด changeResolution เป็นดังนี้


1
2
3
public void changeResolution(Resolution res){
	//...
}

แล้วทำการส่งค่า object parameter ที่ไม่ใช่ชนิด Resolution จะทำให้คอมไพล์ไม่ผ่าน


1
2
changeResolution(res.HIGH); //All good
changeResolution(-1);      //Compile-time error

เมธอดแบบนี้เป็นประเภท "type-safe" นั้่นคือเราไม่สามารถส่งผ่านค่าที่มีประเภทไม่ตรงกับที่กำหนดไว้

การกำหนดค่าตัวแปรของ enum สามารถกำหนดได้แบบนี้ แต่ให้ระวังเรื่องของ case sensitive


1
2
3
Resolution res = Resolution.LOW
Resolution resh = Resolution.valueOf("HIGH");
Resolution resh = Resolution.valueOf("High"); // Run-time exception


สามารถใช้เมธอด value() กับ for-each ดึงค่าออกมาตามลำดับที่กำหนดไว้


1
2
3
for(Resolution r: Resolution.values()) {
	System.out.print(v.name() +", ");
}

Output คือ


1
HIGH, MEDIUM, LOW


Enums สามารถแสดงค่าตามลำดับตอนประกาศขึ้นมาโดยใช้เมธอด ordinal()


1
2
System.out.println(Volume.HIGH.ordinal());
System.out.println(Volume.LOW.ordinal());

Output คือ


1
2
0
2


อ้างอิง : Java8 Programmer2 Study Guide, Esterban Herrera

No comments:

Post a Comment