1. พื้นหลัง
ก่อนที่จะมีการแนะนำภาษา Java รูปแบบทั่วไปสำหรับการระบุประเภท enum คือการประกาศชุดของค่าคงที่ int รหัสที่เราใช้ในการกำหนดก่อนใช้วิธีการคงที่สาธารณะสุดท้ายมีดังนี้โดยใช้ 1 เพื่อเป็นตัวแทนฤดูใบไม้ผลิ 2 เพื่อเป็นตัวแทนฤดูร้อน 3 เพื่อเป็นตัวแทนฤดูใบไม้ร่วงและ 4 เพื่อเป็นตัวแทนฤดูหนาว
ฤดูกาลระดับสาธารณะ {สาธารณะคงที่สปริงสุดท้าย = 1; สาธารณะคงที่สาธารณะในช่วงฤดูร้อน = 2; สาธารณะคงที่ในฤดูใบไม้ร่วงสุดท้ายของสาธารณะ = 3; public Static Final Int Winter = 4;}วิธีนี้เรียกว่ารูปแบบการแจงนับ INT แต่มีอะไรผิดปกติกับรุ่นนี้? เราใช้มันมานานดังนั้นจึงไม่มีปัญหา โดยปกติแล้วรหัสที่เราเขียนจะคำนึงถึงความปลอดภัยการใช้งานง่ายและการอ่าน ก่อนอื่นให้พิจารณาความปลอดภัยประเภท แน่นอนว่ารูปแบบนี้ไม่ปลอดภัย ตัวอย่างเช่นเราออกแบบฟังก์ชั่นที่ต้องใช้ค่าที่แน่นอนในฤดูใบไม้ผลิฤดูร้อนฤดูใบไม้ร่วงและฤดูหนาว อย่างไรก็ตามด้วยประเภท int เราไม่สามารถรับประกันได้ว่ามูลค่าที่ส่งผ่านนั้นถูกกฎหมาย รหัสมีลักษณะเช่นนี้:
สตริงส่วนตัว getChineseseason (int season) {stringbuffer result = new StringBuffer (); Switch (Season) {case season.spring: result.append ("Spring"); หยุดพัก; Case Season.summer: result.append ("ฤดูร้อน"); หยุดพัก; Case Season.AUTUMN: result.append ("Autumn"); หยุดพัก; case season.winter: result.append ("ฤดูหนาว"); หยุดพัก; ค่าเริ่มต้น: result.append ("Season None on Earth"); หยุดพัก; } return result.toString (); } โมฆะสาธารณะ dosomething () {system.out.println (this.getChineseseason (season.spring)); // นี่เป็นสถานการณ์สถานการณ์ปกติโปรแกรม getchineseseason (season.spring) เป็นวิธีที่เราคาดว่าจะใช้ แต่ Getchineseseason (5) ไม่เป็นเช่นนั้นและการรวบรวมนั้นมีความเฉยเมยมาก เราไม่รู้ว่าจะเกิดอะไรขึ้นในรันไทม์ เห็นได้ชัดว่าสิ่งนี้ไม่สอดคล้องกับประเภทความปลอดภัยของโปรแกรม Java
ถัดไปลองพิจารณาความสามารถในการอ่านของรูปแบบนี้ โอกาสส่วนใหญ่เมื่อใช้การแจกแจงฉันต้องสะดวกในการรับการแสดงออกของสตริงของประเภท enum หากเราพิมพ์ค่าคงที่การแจงนับ INT สิ่งที่เราเห็นคือชุดตัวเลขซึ่งไม่มีประโยชน์มาก เราอาจคิดว่าจะใช้ค่าคงที่สตริงแทนค่าคงที่ int แม้ว่ามันจะมีสตริงที่พิมพ์ได้สำหรับค่าคงที่เหล่านี้ แต่ก็ทำให้เกิดปัญหาด้านประสิทธิภาพเนื่องจากมันต้องอาศัยการดำเนินการเปรียบเทียบสตริงดังนั้นรูปแบบนี้จึงเป็นสิ่งที่เราไม่คาดหวัง เมื่อพิจารณาถึงความปลอดภัยทั้งประเภทและการอ่านโปรแกรมข้อเสียของรูปแบบการแจงนับ INT และสตริงจะถูกเปิดเผย โชคดีที่ตั้งแต่การเปิดตัว Java 1.5 มีการเสนอทางเลือกอื่นอีกทางเลือกหนึ่งที่หลีกเลี่ยงข้อเสียของรูปแบบการแจงนับ INT และสตริงและให้ประโยชน์เพิ่มเติมมากมาย นั่นคือประเภท enum บทต่อไปนี้จะแนะนำคำจำกัดความคุณสมบัติสถานการณ์แอปพลิเคชันและข้อดีและข้อเสียของประเภทการแจงนับ
2. คำจำกัดความ <br /> ประเภท enum หมายถึงประเภททางกฎหมายที่ประกอบด้วยชุดค่าคงที่คงที่ ใน Java คำหลัก enum ใช้เพื่อกำหนดประเภท enum ต่อไปนี้เป็นคำจำกัดความของประเภท Java enum
ฤดู enum สาธารณะ {ฤดูใบไม้ผลิ, ฤดูร้อน, ฤดูใบไม้ร่วง, winer;} 3. คุณสมบัติ
ข้อความของ Java ที่กำหนดประเภท enum นั้นง่ายมาก มันมีลักษณะดังต่อไปนี้:
1) ใช้คำหลัก enum 2) ชื่อประเภทเช่นซีซั่น 3) สตริงของค่าที่อนุญาตเช่นฤดูใบไม้ผลิฤดูร้อนฤดูใบไม้ร่วงฤดูหนาวและฤดูกาลที่กำหนดไว้ข้างต้น 4) การแจกแจงสามารถกำหนดแยกต่างหากในไฟล์หรือฝังในคลาส Java อื่น ๆ
นอกเหนือจากข้อกำหนดพื้นฐานดังกล่าวผู้ใช้มีตัวเลือกอื่น ๆ
5) การแจกแจงสามารถใช้อินเทอร์เฟซอย่างน้อยหนึ่งรายการ (อินเตอร์เฟส) 6) ตัวแปรใหม่สามารถกำหนดได้ 7) วิธีใหม่สามารถกำหนดได้ 8) คลาสที่แตกต่างกันไปตามค่าการแจงนับเฉพาะสามารถกำหนดได้
4. สถานการณ์แอปพลิเคชัน
รับความปลอดภัยประเภทที่กล่าวถึงในพื้นหลังเป็นตัวอย่างให้เขียนรหัสนั้นใหม่ด้วยประเภท enum รหัสมีดังนี้:
ฤดู enum สาธารณะ {ฤดูใบไม้ผลิ (1), ฤดูร้อน (2), ฤดูใบไม้ร่วง (3), ฤดูหนาว (4); รหัส INT ส่วนตัว ฤดูกาลส่วนตัว (รหัส int) {this.code = code; } public int getCode () {รหัสส่งคืน; }} ชั้นเรียนสาธารณะ USESON { / ** * แปลงฤดูกาลภาษาอังกฤษเป็นฤดูกาลจีน * @Param Season * @return * / Public String GetChineseseason (ฤดูกาลฤดูกาล) {StringBuffer Result = New StringBuffer (); สวิตช์ (ฤดูกาล) {กรณีสปริง: result.append ("[ภาษาจีน: ฤดูใบไม้ผลิ, ค่าคงที่การแจงนับ:" + season.name () + ", ข้อมูล:" + season.getCode () + "]"); หยุดพัก; Case Autumn: result.append ("[จีน: ฤดูใบไม้ร่วง, การแจงนับค่าคงที่:" + season.name () + ", ข้อมูล:" + season.getCode () + "]"); หยุดพัก; Case Summer: result.append ("[ภาษาจีน: ฤดูร้อน, ค่าคงที่การแจงนับ:" + season.name () + ", ข้อมูล:" + season.getCode () + "]"); หยุดพัก; กรณีฤดูหนาว: result.append ("[จีน: ฤดูหนาว, ค่าคงที่การแจงนับ:" + season.name () + ", ข้อมูล:" + season.getCode () + "]"); หยุดพัก; ค่าเริ่มต้น: result.append ("Season Without Earth" + season.name ()); หยุดพัก; } return result.toString (); } โมฆะสาธารณะ dosomething () {สำหรับ (ฤดูกาล S: season.values ()) {system.out.println (getchineseseason (s)); // นี่เป็นสถานการณ์ปกติ} //system.out.println(getchineseseason(5); // คอมไพเลอร์ล้มเหลวอยู่ที่นี่ซึ่งทำให้มั่นใจได้ถึงความปลอดภัยประเภท} โมฆะคงที่สาธารณะหลัก (สตริง [] arg) {USESON USESON = ใหม่ USESON (); USESON.DOSOMENY (); -[จีน: ฤดูใบไม้ผลิ, ค่าคงที่การแจงนับ: ฤดูใบไม้ผลิ, ข้อมูล: 1] [จีน: ฤดูร้อน, ค่าคงที่การแจงนับ: ฤดูร้อน, ข้อมูล: 2] [จีน: ฤดูใบไม้ร่วง, ค่าคงที่การแจงนับ: ฤดูใบไม้ร่วง, ข้อมูล: 3] [จีน: ฤดูหนาว, ค่าคงที่การแจงนับ: ฤดูหนาว, ข้อมูล: 4]
นี่คือคำถามทำไมฉันถึงต้องการเพิ่มโดเมนลงในประเภท enum? วัตถุประสงค์คือเพื่อเชื่อมโยงข้อมูลกับค่าคงที่ ตัวอย่างเช่น 1 หมายถึงฤดูใบไม้ผลิและ 2 หมายถึงฤดูร้อน
5. สรุป
แล้วคุณควรใช้ enums เมื่อใด เมื่อใดก็ตามที่จำเป็นต้องมีค่าคงที่เช่นวันของสัปดาห์ฤดูกาลของปี ฯลฯ หรือการรวบรวมค่าทั้งหมดที่มีอยู่ก่อนที่เราจะรวบรวม การแจงนับ Java 1.5 สามารถตอบสนองความต้องการของโปรแกรมเมอร์ส่วนใหญ่และลักษณะที่กระชับและง่ายต่อการใช้งานนั้นโดดเด่นมาก
6. การใช้งาน
การใช้ 1: คงที่
สี enum สาธารณะ {สีแดง, เขียว, ว่างเปล่า, สีเหลือง}การใช้งาน 2: สวิตช์
สัญญาณ enum {สีเขียว, สีเหลือง, สีแดง} การจราจรระดับสาธารณะ {สัญญาณสี = signal.red; การเปลี่ยนแปลงโมฆะสาธารณะ () {สวิตช์ (สี) {เคสสีแดง: color = signal.green; หยุดพัก; กรณีสีเหลือง: color = signal.red; หยุดพัก; Case Green: color = signal.yellow; หยุดพัก; -การใช้งาน 3: เพิ่มวิธีการใหม่ใน enum
สี enum สาธารณะ {สีแดง ("สีแดง", 1), สีเขียว ("สีเขียว", 2), ว่างเปล่า ("สีขาว", 3), เยลโล ("เหลือง", 4); // สมาชิกตัวแปรชื่อสตริงส่วนตัว; ดัชนี INT ส่วนตัว // วิธีการสร้างสีส่วนตัว (ชื่อสตริง, ดัชนี int) {this.name = name; this.index = ดัชนี; } // วิธีปกติสตริงคงที่สาธารณะ getName (ดัชนี int) {สำหรับ (color c: color.values ()) {ถ้า (c.getIndex () == ดัชนี) {return c.name; }} return null; } // รับวิธีการตั้งค่าสตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } public int getIndex () {return index; } โมฆะสาธารณะ setIndex (ดัชนี int) {this.index = index; -การใช้งาน 4: วิธีการเขียนทับการแจงนับ
สี enum สาธารณะ {สีแดง ("สีแดง", 1), สีเขียว ("สีเขียว", 2), ว่างเปล่า ("สีขาว", 3), เยลโล ("เหลือง", 4); // สมาชิกตัวแปรชื่อสตริงส่วนตัว; ดัชนี INT ส่วนตัว // วิธีการสร้างสีส่วนตัว (ชื่อสตริง, ดัชนี int) {this.name = name; this.index = ดัชนี; } // วิธีการเขียนทับ @Override สตริงสาธารณะ toString () {return.index+"_"+this.name; -การใช้งาน 5: ใช้อินเทอร์เฟซ
พฤติกรรมการเชื่อมต่อสาธารณะ {void print (); สตริง getInfo (); } public enum สีใช้พฤติกรรม {สีแดง ("สีแดง", 1), สีเขียว ("สีเขียว", 2), ว่างเปล่า ("ขาว", 3), เยลโล ("เหลือง", 4); // สมาชิกตัวแปรชื่อสตริงส่วนตัว; ดัชนี INT ส่วนตัว // วิธีการสร้างสีส่วนตัว (ชื่อสตริง, ดัชนี int) {this.name = name; this.index = ดัชนี; } // เมธอดอินเตอร์เฟส @Override สตริงสาธารณะ getInfo () {return this.name; } // เมธอดอินเตอร์เฟส @Override โมฆะสาธารณะพิมพ์ () {system.out.println (this.index+":"+this.name); -การใช้งาน 6: ใช้อินเทอร์เฟซเพื่อจัดระเบียบการแจงนับ
ส่วนต่อประสานอาหารสาธารณะ {Enum Coffee ใช้อาหาร {black_coffee, decaf_coffee, latte, cappuccino} enum ของหวานใช้อาหาร {ผลไม้, เค้ก, เจลาโต้}}}ข้างต้นเป็นเรื่องเกี่ยวกับบทความนี้ฉันหวังว่ามันจะเป็นประโยชน์กับการเรียนรู้ของทุกคน