ในทำนองเดียวกันเมื่อคุณกำหนดชื่อตารางในฐานข้อมูลหรือคลาสใน Java คุณใช้เอกพจน์สำหรับ enums ก็เป็นตัวเลือกที่ดีที่สุด ดูว่าคุณจะใช้มันอย่างไร
ลองเขียนตัวอย่าง:
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
class Appointment {
private Day day;
public void setDay(Day day) {
this.day = day;
}
}
ในรูปแบบเอกพจน์คุณจะเห็นชัดเจนถึงความตั้งใจของแอตทริบิวต์วัน "วัน" เป็นวันของสัปดาห์ที่จะมีการนัดหมายนี้ มิฉะนั้นลายเซ็นของวิธีการจะถูกกำหนดวัน (วันวัน) และแน่นอนว่าผู้คนจำนวนมากจะสงสัยว่าการนัดหมายอาจเกิดขึ้นในมากกว่าหนึ่งวัน
หากคุณทำงานใน บริษัท มีกะ 48 ชั่วโมงคุณสามารถลองกำหนดสิ่งต่อไปนี้:
public enum Days {
MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY
}
ด้วยวิธีนี้คุณสามารถกำหนดวันที่คุณกำลังจะไปทำงาน แต่ก็ยังจะดูแปลกและมีตัวเลือกที่ดีกว่าและใช้รูปแบบเอกพจน์:
public enum Shift {
MONDAY_TUESDAY, WEDNESDAY_THURSDAY, FRIDAY_SATURDAY
}
ตอนนี้คุณกำลังแสดงความหมายของ enum จริงๆ โดยปกติในโดเมนใด ๆ ที่คุณจะพบว่าการใช้เอกพจน์สำหรับ enum เป็นตัวเลือกที่ดีที่สุดเนื่องจากค่าคงที่ใน enum เป็นเพียงองค์ประกอบเดียว
คุณยังพูดถึง. NET "ค่าสถานะ" enum ใน. NET เพียงหมายความว่าเมื่อคุณคาดหวังว่า enum นั้นเป็นพารามิเตอร์สิ่งที่คุณได้รับจริงๆคือรายการองค์ประกอบของ enum นั้น (เก็บไว้เป็นจำนวนเต็ม)
// Define an Enum with FlagsAttribute.
[FlagsAttribute]
enum MultiHue : short
{
Black = 0,
Red = 1,
Green = 2,
Blue = 4
};
public void setMultiHue(MultiHue hues);
คุณสามารถทำเช่นเดียวกันใน Java แต่ Enum ยังคงเป็นเอกพจน์:
public enum Hue {
BLACK, RED, GREEN, BLUE;
private final Integer hue;
Hue() {
this.hue = 1 << this.ordinal();
}
public Integer toFlag() {
return this.hue;
}
}
public class MultiHue {
private Integer hues = 0;
public void addHue(Hue hue) {
this.hues |= hue.toFlag();
}
public boolean hasHue(Hue hue) {
return (this.hues & hue.toFlag()) != 0;
}
}
ง่ายกว่าและชัดเจนกว่า (แม้ว่าจะใช้หน่วยความจำมากกว่า) ในการทำเช่นนี้กับ Java ก็คือการใช้ List