ฉันมี enum SOME_ENUM
:
public enum SOME_ENUM {
EN_ONE,
EN_TWO,
EN_THREE;
}
จะSOME_ENUM.values()
ส่งคืน enum ตามลำดับการประกาศ enum เสมอ:
EN_ONE, EN_TWO, EN_THREE
? เป็นกฎหรือไม่รับประกันว่าจะไม่มีการเปลี่ยนแปลงใน JDK รุ่นถัดไป?
ฉันมี enum SOME_ENUM
:
public enum SOME_ENUM {
EN_ONE,
EN_TWO,
EN_THREE;
}
จะSOME_ENUM.values()
ส่งคืน enum ตามลำดับการประกาศ enum เสมอ:
EN_ONE, EN_TWO, EN_THREE
? เป็นกฎหรือไม่รับประกันว่าจะไม่มีการเปลี่ยนแปลงใน JDK รุ่นถัดไป?
คำตอบ:
ข้อกำหนดภาษา Java ใช้ภาษาที่ชัดเจนนี้:
@ ส่งคืนอาร์เรย์ที่มีค่าคงที่ของประเภท enum นี้ตามลำดับที่ประกาศ[Source]
ดังนั้นใช่พวกเขาจะถูกส่งกลับตามลำดับการประกาศ เป็นที่น่าสังเกตว่าลำดับอาจเปลี่ยนไปเมื่อเวลาผ่านไปหากมีคนเปลี่ยนชั้นเรียนดังนั้นโปรดระมัดระวังเกี่ยวกับวิธีการใช้สิ่งนี้
ใช่รับประกันว่าจะส่งคืนตามลำดับนั้น
อย่างไรก็ตามคุณควรหลีกเลี่ยงการพึ่งพาสิ่งนั้นและordinal()
ค่าเนื่องจากสามารถเปลี่ยนแปลงได้หลังจากแทรกรายการใหม่เป็นต้น
มันจะถูกกำหนดโดยการสั่งซื้อค่าของคุณมีการประกาศใน. แต่ไม่มีการรับประกันว่าคุณ (หรือคนอื่น) จะไม่สั่งซื้อ / แทรก / ลบค่าในอนาคต ดังนั้นคุณไม่ควรพึ่งพาคำสั่ง
Java ที่มีประสิทธิภาพ 2nd Edition อุทิศ Item 31 ให้กับหัวข้อที่เกี่ยวข้องอย่างใกล้ชิด: ใช้ช่องอินสแตนซ์แทนลำดับ :
ห้ามหาค่าที่เกี่ยวข้องกับ enum จากลำดับของมัน เก็บไว้ในช่องอินสแตนซ์แทน
enum
เพื่อจุดประสงค์บางอย่างที่ไม่ได้มีไว้สำหรับ
คำตอบอื่น ๆ นั้นดี แต่อย่าแสดงความคิดเห็นเกี่ยวกับสิ่งนี้:
"เป็นกฎหรือไม่รับประกันว่าจะไม่มีการเปลี่ยนแปลงในรุ่นถัดไปของ Jdk"
ฉันไม่เชื่อว่าจะมีการค้ำประกัน JDK ในอนาคตดังนั้นคุณไม่ควรกังวลเกี่ยวกับเรื่องนี้ด้วยซ้ำ จะไม่มีทางบังคับพวกเขาได้ผู้นำ JDK ในอนาคตอาจตัดสินใจหักหลังในการค้ำประกันดังกล่าว มันเหมือนกับระบบรัฐสภาของเวสต์มินสเตอร์: "ไม่มีรัฐสภาใดสามารถผูกมัดรัฐสภาในอนาคตได้"
กล่าวได้ว่าประวัติศาสตร์ของ JDK แสดงให้เห็นถึงความสอดคล้องที่ดีเยี่ยม พวกเขาไม่ได้ทำการเปลี่ยนแปลงที่ไม่สมบูรณ์มากนักดังนั้นคุณจึงมั่นใจได้ว่าพฤติกรรมที่ระบุในปัจจุบัน(ไม่ใช่แค่สังเกต) จะได้รับการรักษาไว้