การแจงนับใน เป็นวิธีการกำหนดคลาสที่มีค่าคงที่และตั้งชื่อตามลำดับ โดยใช้คำหลัก enum. ในเรื่องนี้ ' สอน Java Enum ” บทความนี้เราจะมาเรียนรู้กันกำหนด Enumeration พร้อมกับตัวอย่างเพื่อความเข้าใจที่ดีขึ้น
- Enumeration คืออะไร?
- ทำไมเราต้องมีการแจงนับ
- ความแตกต่างระหว่าง Enum และ Class
- ตัวอย่างการปฏิบัติของ Enum
- ข้อดีของ Enum
- Enum Usecase: ร็อค, กระดาษเกมกรรไกร
Enumeration คืออะไร?
Java Enums คือคลาสที่มีชุดค่าคงที่คงที่หรือตัวแปรที่ไม่มีแนวโน้มที่จะเปลี่ยนแปลง การแจงนับใน Java ทำได้โดยใช้คำสำคัญ enum. Java enum ค่าคงที่คือ คงที่ และ สุดท้าย โดยปริยาย. คุณลักษณะ Enum สามารถใช้ได้ตั้งแต่ JDK เวอร์ชัน 1.5.2
ทำไมเราต้องมีการแจงนับ
enum ปรับปรุงความปลอดภัยของประเภทในการตรวจสอบเวลาคอมไพล์เพื่อหลีกเลี่ยงข้อผิดพลาดในขณะทำงานโดยหลีกเลี่ยงรหัสสำเร็จรูป ตัวอย่างเช่นหากคุณต้องเลือกความเป็นไปได้หนึ่งจากตัวเลือกที่มีอยู่น้อยที่สุดให้พูดว่า
งาน ประเภท: (สัญญา / ชั่วคราว / ถาวร)
จากนั้นตัวเลือกที่ดีที่สุดคือการใช้ไฟล์ enum. เพราะ enum สามารถใช้งานได้ง่ายในสวิตช์ enum สามารถข้ามผ่านได้ enum สามารถ มี ฟิลด์ตัวสร้างและวิธีการ ดังนั้นจะเพิ่มการตรวจสอบเวลาคอมไพล์และหลีกเลี่ยงข้อผิดพลาดเนื่องจากการส่งผ่านค่าคงที่ไม่ถูกต้องเนื่องจากคุณได้บันทึกไว้แล้วว่าค่าใดถูกต้องตามกฎหมายที่จะใช้
ความแตกต่างระหว่าง Enum และ Class
แม้ว่าคลาสและ enum จะมีฟังก์ชันการทำงานที่คล้ายกันในสภาพแวดล้อม Java แต่ก็มีความแตกต่างกันในบางด้าน ให้เราพูดถึงความแตกต่าง
Enum | คลาส |
ไม่สามารถแทนที่ค่าคงที่ของ Enum ได้ | สามารถลบล้างค่าคงที่ของคลาสได้ |
Enum ไม่สนับสนุนการสร้างวัตถุ | คลาสรองรับการสร้างออบเจ็กต์ |
Enum ไม่สามารถขยายคลาสอื่น ๆ ได้ | ชั้นเรียนสามารถขยายชั้นเรียนอื่น ๆ |
enum คใช้อินเทอร์เฟซ | คลาสสามารถใช้อินเทอร์เฟซ |
ตัวอย่างการปฏิบัติของ Enum
ตอนนี้เพื่อให้เข้าใจ enum ในวิธีที่ดีขึ้นให้เราดำเนินการตามตัวอย่างที่ใช้ได้จริงตามต่อไปนี้
- การกำหนด Enumeration ใน Java
- Enum ใช้ใน Switch Case
- การสืบทอดโดยใช้ enum
- Enum พร้อมค่าที่กำหนดเอง
- Enum ในคำสั่ง if-else-if
- วิธีการต่างๆที่ใช้กับ enum
การกำหนด Enumeration ใน Java
สามารถประกาศ Enum ได้ทั้งในชั้นเรียนหรือนอก cปล่อย. แต่ไม่สามารถประกาศภายในวิธีการใด ๆ เรามาดูตัวอย่างเล็กน้อยเพื่อทำความเข้าใจเกี่ยวกับไวยากรณ์คำจำกัดความและการประกาศ
ไวยากรณ์:
ชื่อ enum {ค่าคงที่}
ในตัวอย่างนี้เราได้ประกาศไฟล์ หลัก() วิธี ภายใน enum
นิยามแพ็กเกจคลาสสาธารณะ Edureka {enum Level {BAJA, KTM, YAMAHA} public static void main (String [] args) {Level myVar = Level.KTM System.out.println (myVar)}}
// โอวพุท
KTM
ในตัวอย่างนี้ไฟล์ หลัก() มีการประกาศวิธีการ ข้างนอก ของ enum
คำจำกัดความของแพ็คเกจ enum สี {BAJAJ, KTM, YAMAHA} คลาสสาธารณะ Edureka {public static void main (String [] args) {Bike b1 = Color.YAMAHA System.out.println (b1)}}
// เอาต์พุต:
YAMAHA
Enum ใช้ใน Switch Case
การแจงนับสามารถใช้ในคำสั่งสวิตช์ได้เช่นกัน สิ่งสำคัญคือคำสั่ง case ทั้งหมดต้องใช้ค่าคงที่จาก enum เดียวกันกับที่ใช้โดยคำสั่ง switch ให้เราตรวจสอบตัวอย่างตามนี้
การเปรียบเทียบเครื่องมืออัตโนมัติของกระบวนการหุ่นยนต์
ที่นี่เราจะประกาศ enum โดยมีวันในสัปดาห์เป็นองค์ประกอบและเราจะส่งข้อมูลในรูปแบบของสตริงเพื่อพิมพ์ข้อมูลของกรณีที่ตรงกัน
แพ็คเกจเปลี่ยนวันที่ enum {วันอาทิตย์วันจันทร์วันอังคารวันพุธวันพฤหัสบดีวันศุกร์วันเสาร์} ชั้นเรียนสาธารณะ Edureka {วันวันสาธารณะ Edureka (วันวัน) {this.day = วัน} โมฆะสาธารณะ dayIsLike () {สวิตช์ (วัน) {case วันจันทร์: System.out.println ('สวัสดีวันนี้วันจันทร์') break case วันอังคาร: System.out.println ('สวัสดีวันนี้คือวันอังคาร') break case WEDNESDAY: System.out.println ('สวัสดีวันนี้เป็นวันพุธ ') break case วันพฤหัสบดี: System.out.println (' สวัสดีวันนี้เป็นวันพฤหัสบดี ') break case วันศุกร์: System.out.println (' สวัสดีวันนี้คือวันศุกร์ ') break case SATURDAY: System.out.println (' สวัสดีวันนี้เป็นวันหยุดสุดสัปดาห์ของคุณ ') break case SUNDAY: System.out.println (' Hi, Today is a Holiday ') break default: System.out.println (' Please enter a valid day. ') break}} public static เป็นโมฆะ main (String [] args) {String str = 'MONDAY' Edureka e1 = new Edureka (Day.valueOf (str)) e1.dayIsLike ()}}
// เอาต์พุต:
สวัสดีวันนี้คือวันจันทร์
การสืบทอดโดยใช้ enum
โดยทั่วไปใด ๆ enum แสดงเป็นคลาสที่ขยายคลาสนามธรรม java.lang Enum และมีสมาชิกคงที่หลายคน ดังนั้น enum ไม่สามารถขยายชั้นเรียนอื่น ๆ หรือ enum ไม่มีหลาย ๆ มรดก . ให้เราดำเนินการตัวอย่างเพื่อทำความเข้าใจในทางที่ดีขึ้น
ที่นี่เราจะสืบทอดระบบปฏิบัติการตามผู้ผลิตโทรศัพท์
pivot และ unfivot ในเซิร์ฟเวอร์ sql
การนำเข้าแพคเกจการสืบทอด java.util.ArrayList นำเข้า java.util.List คลาสสาธารณะ Edureka {public static void main (String [] args) {List inherit = new ArrayList () inherit.add (LibraryEnum.FIRST) inherit.add (ClientEnum. google) สำหรับ (HTTPMethodConvertible element: inherit) {System.out.println (element.getHTTPMethodType ())}} อินเทอร์เฟซแบบคงที่ HTTPMethodConvertible {public String getHTTPMethodType ()} static enum LibraryEnum ใช้ HTTPMethodConvertible {FIRST ('Google Pixel') SECOND ( 'Huawei'), THIRD ('Apple 11 Pro') String httpMethodType LibraryEnum (String phone) {httpMethodType = phone} public String getHTTPMethodType () {return httpMethodType}} static enum ClientEnum ใช้ HTTPMethodConvertible {huawei ('HongMing OS'), apple ('iOS'), google ('Android One') สตริง httpMethodType ClientEnum (สตริง s) {httpMethodType = s} สตริงสาธารณะ getHTTPMethodType () {return httpMethodType}}}
// เอาต์พุต:
Google Pixel
Android One
Enum พร้อมค่าที่กำหนดเอง
Enums มีค่าสตริงของตัวเองโดยค่าเริ่มต้นเรายังสามารถกำหนดค่าที่กำหนดเองให้กับ enums ให้เราพิจารณาตัวอย่างด้านล่าง
enum Traffic {RED (“ STOP”), ORANGE (“ WAIT”), GREEN (“ GO”)}
จากตัวอย่างข้างต้นเราจะเห็นว่า Traffic enum มีสมาชิกสามคน ได้แก่
แดงส้ม และ เขียว โดยมีค่าที่กำหนดเองที่แตกต่างกัน หยุดรอ และ ไป ตามลำดับ
ตอนนี้เพื่อใช้ enum ประเภทเดียวกันในโค้ดเราคาดว่าจะทำตามบางประเด็นนั่นคือ:
- เราจำเป็นต้องสร้าง ตัวสร้างพารามิเตอร์ สำหรับคลาส enum นี้ เพราะเรารู้ดีว่า enum ไม่สามารถสร้างออบเจ็กต์ของคลาสได้อย่างชัดเจนดังนั้นสำหรับการเริ่มต้นเราจึงใช้ตัวสร้างพารามิเตอร์
- ผู้สร้าง ไม่สามารถเป็นสาธารณะหรือได้รับการคุ้มครองที่ต้องมี เอกชน หรือ ค่าเริ่มต้น ตัวดัดแปลง หากเราสร้างสาธารณะหรือได้รับการป้องกันจะอนุญาตให้เริ่มต้นมากกว่าหนึ่งวัตถุที่ต่อต้านโดยสิ้นเชิง ฟังก์ชัน enum
- เราต้องสร้างเมธอด getter เพื่อให้ได้ค่าของ enums.
ให้เราดำเนินการโปรแกรมตามนี้
แพ็กเกจทราฟฟิก enum TrafficSignal {RED ('STOP'), GREEN ('GO'), ORANGE ('WAIT') private String action public String getAction () {return this.action} private TrafficSignal (String action) {this.action = action}} คลาสสาธารณะ Edureka {public static void main (String args []) {TrafficSignal [] signs = TrafficSignal.values () สำหรับ (TrafficSignal signal: signs) {System.out.println ('name:' + signal.name () + 'action:' + signal.getAction ())}}
// เอาต์พุต:
ชื่อ: การกระทำสีแดง: หยุด
ชื่อ: GREEN action: GO
ชายe: การกระทำสีส้ม: รอ
Enum ในคำสั่ง if-else-if
ตอนนี้ให้เราดำเนินการโปรแกรมตาม enum ในคำสั่ง if-else-if ที่นี่เราจะพบทิศทางของการข้ามผ่านโดยการส่งผ่านค่าของทิศทางที่มีอยู่ใน enum
package Directions enum Directions {EAST, WEST, NORTH, SOUTH} public class Edureka {public static void main (String args []) {Directions dir = Directions.NORTH if (dir == Directions.EAST) {System.out.println ( 'Direction: East')} else if (dir == Directions.WEST) {System.out.println ('Direction: West')} else if (dir == Directions.NORTH) {System.out.println ('Direction : North ')} else {System.out.println (' Direction: South ')}}}
// เอาต์พุต:
พูดction: ภาคเหนือ
วิธีการต่างๆที่ใช้กับ enum
ค่า (): เมื่อคุณสร้าง enum ไฟล์ คอมไพเลอร์ Java เพิ่มไฟล์ ค่า () วิธี. วิธีนี้ส่งคืนไฟล์ อาร์เรย์ มีค่าทั้งหมดของ enum
// ไวยากรณ์:
ค่า enum ชนิดคงที่สาธารณะ [] ()
เราจะหาค่าดัชนีขององค์ประกอบเฉพาะในอาร์เรย์
ทศนิยมเป็นไบนารีใน python
ค่าแพ็คเกจ enum Color {RED, GREEN, BLUE} public class Edureka {public static void main (String [] args) {Color arr [] = Color.values () สำหรับ (Colour col: arr) {System.out.println ( col + 'ที่ดัชนี' + col.ordinal ())} System.out.println (Color.valueOf ('RED'))}}
// เอาต์พุต:
สีแดงที่ดัชนี 0
สีเขียวที่ดัชนี 1
BLUE ที่ดัชนี 2
สุทธิ
มูลค่าของ(): นี้วิธีนี้ใช้เพื่อส่งกลับค่าคงที่การแจงนับซึ่งมีค่าเท่ากับ ส่งผ่านเป็นอาร์กิวเมนต์ขณะเรียกใช้เมธอดนี้
// ไวยากรณ์:
ค่า enum ชนิดคงที่สาธารณะ f (String str)
ที่นี่เราจะพบราคาของโทรศัพท์เครื่องหนึ่งตามข้อมูลที่เราส่งผ่านไปยังสตริง
package valuesof enum Mobile {Samsung (1099), Apple (1250), Google (1325) int price Mobile (int p) {price = p} int showPrice () {return price}} public class Edureka {public static void main (String args []) {System.out.println ('CellPhone List:') สำหรับ (Mobile m: Mobile.values ()) {System.out.println (m + 'cost' + m.showPrice () + 'dollar' )} Mobile ret ret = Mobile.valueOf ('Samsung') System.out.println ('Selected:' + ret)}}
// เอาต์พุต:
Samsung ราคา 1,099 ดอลลาร์
Apple ราคา 1250 ดอลลาร์
Google มีค่าใช้จ่าย 1325 ดอลลาร์
เลือก: Samsung
ลำดับ (): ตัวแปล Java จะเพิ่ม ลำดับ () วิธีการภายในเมื่อสร้างไฟล์ enum. วิธีการจัดลำดับ () ส่งคืนค่า ดัชนี ของค่า enum
// ไวยากรณ์:
ลำดับสุดท้าย int สาธารณะ ()
ที่นี่เราจะพบค่าดัชนีขององค์ประกอบเฉพาะในอาร์เรย์ และตำแหน่งของผลเชอร์รี่
Package ordinal enum Fruits {Apple, Banana, Cherry, Date, Elderberry} enum Vegetables {Carrot, Beetroot, Beans, Tomato, Onion} public class Edureka {public static void main (String [] args) {Fruits [] fru = Fruits. ค่า () สำหรับ (Fruits fr: fru) {System.out.println (fr + ':' + fr.ordinal ())} Fruits f1, f2, f3 f1 = Fruits.Apple f2 = Fruits.Cherry f3 = Fruits.Apple if (f2.compareTo (f1)> 0) {System.out.println (f2 + 'มาหลัง' + f1)} ผัก v1 = ผักบีทรูทถ้า (f1.equals (v1)) {System.out.println (' ไม่ถูกต้อง ')}}}
// เอาต์พุต:
แอปเปิ้ล: 0
กล้วย: 1
เชอร์รี่: 2
วันที่: 3
Elderberry: 4
เชอร์รี่มาหลังจาก Apple
ข้อดีของ Enum
- Enum ใน Java ปรับปรุง ประเภทความปลอดภัย
- Enum ถูกออกแบบมาให้ใช้งานได้ง่าย สลับกรณี
- Enum ได้ ลัดเลาะ
- Enum สามารถมีได้ ฟิลด์วิธีการ และ ช่างก่อสร้าง
- Enum สามารถใช้งานได้ อินเทอร์เฟซ
- Enum ไม่สามารถขยายไฟล์ ชั้นเรียน เพราะภายในมันขยายออกไป Enum ชั้นเรียน
Enum Usecase: เกมร็อคกระดาษกรรไกร
เราจะใช้ enum ใน Java เพื่อสร้างเกมในวัยเด็กของเรา หิน (หิน) กระดาษและกรรไกร . รหัสต่อไปนี้อธิบายถึงวิธีการ
package Edureka import java.util.Random import java.util.Scanner enum HandSign {SCISSOR, PAPER, STONE} public class SPS {public static void main (String [] args) {Random random = new Random () boolean gameOver = false HandSign playerMove = HandSign.SCISSOR HandSign computerMove int numTrials = 0 int numComputerWon = 0 int numPlayerWon = 0 int numTie = 0 Scanner in = new Scanner (System.in) System.out.println ('n ให้เราเริ่ม ... n') ในขณะที่ (! gameOver) {System.out.printf ('% nScissor-Paper-Stonen') บูลีน validInput do {System.out.print ('nYour turn (กรุณาป้อน s สำหรับกรรไกร, p สำหรับกระดาษ, t สำหรับหิน, q เพื่อออก): n ') char inChar = in.next (). toLowerCase (). charAt (0) validInput = true if (inChar ==' q ') {gameOver = true} else if (inChar ==' s ' ) {playerMove = HandSign.SCISSOR} else if (inChar == 'p') {playerMove = HandSign.PAPER} else if (inChar == 't') {playerMove = HandSign.STONE} else {System.out.println ( 'n โปรดตรวจสอบอินพุตและลองอีกครั้ง! n') validInput = false}} ในขณะที่ (! val idInput) if (! gameOver) {int aRandomNumber = random.nextInt (3) if (aRandomNumber == 0) {computerMove = HandSign.SCISSOR System.out.println ('n ถึงตาของฉัน: SCISSORn')} else if (aRandomNumber = = 0) {computerMove = HandSign.PAPER System.out.println ('nIt's My turn: PAPERn')} else {computerMove = HandSign.STONE System.out.println ('nIt's My turn: STONEn')} if (computerMove = = playerMove) {System.out.println ('nIt's a Tie! n') ++ numTie} else if (computerMove == HandSign.SCISSOR & amp & amp playerMove == HandSign.PAPER) {System.out.println ('nScissor ตัดกระดาษ , ฉันชนะ! n ') ++ numComputerWon} else if (computerMove == HandSign.PAPER & amp & amp playerMove == HandSign.STONE) {System.out.println (' nPaper wraps stone, I won! n ') ++ numComputerWon} else if (computerMove == HandSign.STONE & amp & amp playerMove == HandSign.SCISSOR) {System.out.println ('nStone แตกกรรไกรฉันจะชนะ! n') ++ numComputerWon} else {System.out.println ('nCongratulations. .. ! คุณชนะ! n ') ++ numPlayerWon} ++ numTrials}} System.out.printf ('% n จำนวนการทดลอง: '+ numTrials) System.out.printf (' ฉันชนะ% d (%. 2f %%) . คุณชนะ% d (%. 2f %%).% n ', numComputerWon, 100.0 * numComputerWon / numTrials, numPlayerWon, 100.0 * numPlayerWon / numTrials) System.out.println (' Bye!, หวังว่าคุณจะสนุก .. ! ' )}}
// เอาต์พุต:
เราเริ่มต้นกันเลย...
กรรไกรกระดาษ - หิน
ตาของคุณ (โปรดป้อน s สำหรับกรรไกร, p สำหรับกระดาษ, t สำหรับหิน, q เพื่อเลิก):
เอส
ถึงตาฉันแล้ว: STONE
กรรไกรตัดหินฉันชนะ!
กรรไกรกระดาษ - หิน
ตาของคุณ (โปรดป้อน s สำหรับกรรไกร, p สำหรับกระดาษ, t สำหรับหิน, q เพื่อเลิก):
อะไร
จำนวนการทดลอง: 1 ฉันชนะ 1 (100.00%) คุณชนะ 0 (0.00%)
บาย! หวังว่าจะสนุกนะ .. !
ด้วยเหตุนี้เราจึงมาถึงจุดสิ้นสุดของบทช่วยสอน Java Enum นี้ ฉันหวังว่าคุณจะเข้าใจ Enum ใน Java และการใช้งานผ่านตัวอย่างแบบเรียลไทม์
ตอนนี้คุณเข้าใจแล้ว enum ข้อมูลเบื้องต้นเกี่ยวกับ 'Java Enum Tutorial' นี้โปรดดูที่ไฟล์ โดย Edureka บริษัท การเรียนรู้ออนไลน์ที่เชื่อถือได้ซึ่งมีเครือข่ายผู้เรียนที่พึงพอใจมากกว่า 250,000 คนกระจายอยู่ทั่วโลก หลักสูตรการฝึกอบรมและการรับรอง Java J2EE และ SOA ของ Edureka ได้รับการออกแบบมาสำหรับนักเรียนและผู้เชี่ยวชาญที่ต้องการเป็น Java Developer หลักสูตรนี้ออกแบบมาเพื่อให้คุณเริ่มต้นการเขียนโปรแกรม Java และฝึกอบรมแนวคิด Java ทั้งหลักและขั้นสูงพร้อมกับกรอบงาน Java ต่างๆเช่น Hibernate & ฤดูใบไม้ผลิ .
มีคำถามสำหรับเรา? พูดถึงในส่วนความคิดเห็นของบล็อก 'Java Enum Tutorial' และเราจะติดต่อกลับโดยเร็วที่สุด