ฉันคุ้นเคยกับ C # มาก แต่เริ่มทำงานได้มากขึ้นใน Java ฉันคาดหวังที่จะเรียนรู้ว่า enums ใน Java นั้นโดยทั่วไปเทียบเท่ากับใน C # แต่เห็นได้ชัดว่านี่ไม่ใช่กรณี ตอนแรกฉันรู้สึกตื่นเต้นที่ได้เรียนรู้ว่า Java enums อาจมีข้อมูลหลายชิ้นซึ่งดูเหมือนว่ามีประโยชน์มาก ( http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html ) อย่างไรก็ตามตั้งแต่นั้นฉันได้พบคุณสมบัติมากมายที่ขาดหายไปเล็กน้อยใน C # เช่นความสามารถในการกำหนดองค์ประกอบ enum ได้อย่างง่ายดายด้วยค่าที่แน่นอนและดังนั้นความสามารถในการแปลงจำนวนเต็มเป็น enum โดยไม่ต้องใช้ความพยายามอย่างมาก ( ie แปลงค่าจำนวนเต็มเป็นการจับคู่ Enum Java )
ดังนั้นคำถามของฉันคือ: มีประโยชน์กับ Java enums มากกว่าชั้นเรียนที่มีทุ่งสุดท้ายคงที่สาธารณะ? หรือว่าเป็นเพียงแค่ให้มีขนาดกะทัดรัดมากขึ้นไวยากรณ์?
แก้ไข: ให้ฉันชัดเจนยิ่งขึ้น อะไรคือประโยชน์ของ Java enums มากกว่าชั้นเรียนที่มีกลุ่มของเขตข้อมูลสุดท้ายคงที่ประเภทเดียวกัน ? ตัวอย่างเช่นในตัวอย่างของดาวเคราะห์ที่ลิงก์แรกสิ่งที่เป็นข้อได้เปรียบของ enum ในชั้นเรียนที่มีค่าคงที่สาธารณะเหล่านี้:
public static final Planet MERCURY = new Planet(3.303e+23, 2.4397e6);
public static final Planet VENUS = new Planet(4.869e+24, 6.0518e6);
public static final Planet EARTH = new Planet(5.976e+24, 6.37814e6);
public static final Planet MARS = new Planet(6.421e+23, 3.3972e6);
public static final Planet JUPITER = new Planet(1.9e+27, 7.1492e7);
public static final Planet SATURN = new Planet(5.688e+26, 6.0268e7);
public static final Planet URANUS = new Planet(8.686e+25, 2.5559e7);
public static final Planet NEPTUNE = new Planet(1.024e+26, 2.4746e7);
เท่าที่ฉันจะบอกได้คำตอบของคาซาบลังก้าเป็นคำตอบเดียวที่ตอบสนองได้
S
ดังนั้นตอนนี้เรากำลังพูดถึงอาจส่งผ่านพวกเขาไปยังฟังก์ชั่น ฯลฯ เราต้องการความปลอดภัยประเภทหรือไม่? ดีไม่มี แต่แล้วคนส่วนใหญ่พิจารณาประเภท c สไตล์ของ "ทุกอย่างเป็นvoid*
สไตล์ที่ดี" และมันสามารถหยุดข้อบกพร่อง (โดยเฉพาะถ้าผ่านพารามิเตอร์ enum / string มากกว่าหนึ่งตัว) นอกจากนี้มันยังทำให้ค่าคงที่อยู่ในเนมสเปซของตัวเอง ฯลฯ ตรงกันข้ามกับที่ไม่มีประโยชน์จริง ๆ เพียงแค่มีตัวแปรธรรมดา
int
s ไม่มีความปลอดภัยประเภทเพราะใครสามารถผ่านค่าใด ๆ ในทางกลับกันวัตถุที่พิมพ์ออกมานั้นไม่ต่างจาก enums ในแง่ของความปลอดภัยของประเภท
public static final
สาขาซึ่งอาจจะพิมพ์ค่าและไม่จำเป็นต้องint
s