Java Enum Tutorial: มันคืออะไรและจะใช้งานได้อย่างไร?



บทความเกี่ยวกับ Java Enum Tutorial นี้จะให้ความรู้โดยละเอียดเกี่ยวกับค่าคงที่ของ Enum พร้อมกับตัวอย่างที่ใช้ได้จริงเพื่อความเข้าใจที่ดีขึ้น

การแจงนับใน เป็นวิธีการกำหนดคลาสที่มีค่าคงที่และตั้งชื่อตามลำดับ โดยใช้คำหลัก enum. ในเรื่องนี้ ' สอน Java Enum ” บทความนี้เราจะมาเรียนรู้กันกำหนด Enumeration พร้อมกับตัวอย่างเพื่อความเข้าใจที่ดีขึ้น

Enumeration คืออะไร?

Java Enums คือคลาสที่มีชุดค่าคงที่คงที่หรือตัวแปรที่ไม่มีแนวโน้มที่จะเปลี่ยนแปลง การแจงนับใน Java ทำได้โดยใช้คำสำคัญ enum. Java enum ค่าคงที่คือ คงที่ และ สุดท้าย โดยปริยาย. คุณลักษณะ Enum สามารถใช้ได้ตั้งแต่ JDK เวอร์ชัน 1.5.2





ทำไมเราต้องมีการแจงนับ

enum ปรับปรุงความปลอดภัยของประเภทในการตรวจสอบเวลาคอมไพล์เพื่อหลีกเลี่ยงข้อผิดพลาดในขณะทำงานโดยหลีกเลี่ยงรหัสสำเร็จรูป ตัวอย่างเช่นหากคุณต้องเลือกความเป็นไปได้หนึ่งจากตัวเลือกที่มีอยู่น้อยที่สุดให้พูดว่า

งาน ประเภท: (สัญญา / ชั่วคราว / ถาวร)



พนักงานสอน Java enum

จากนั้นตัวเลือกที่ดีที่สุดคือการใช้ไฟล์ enum. เพราะ enum สามารถใช้งานได้ง่ายในสวิตช์ enum สามารถข้ามผ่านได้ enum สามารถ มี ฟิลด์ตัวสร้างและวิธีการ ดังนั้นจะเพิ่มการตรวจสอบเวลาคอมไพล์และหลีกเลี่ยงข้อผิดพลาดเนื่องจากการส่งผ่านค่าคงที่ไม่ถูกต้องเนื่องจากคุณได้บันทึกไว้แล้วว่าค่าใดถูกต้องตามกฎหมายที่จะใช้

ความแตกต่างระหว่าง Enum และ Class

แม้ว่าคลาสและ enum จะมีฟังก์ชันการทำงานที่คล้ายกันในสภาพแวดล้อม Java แต่ก็มีความแตกต่างกันในบางด้าน ให้เราพูดถึงความแตกต่าง



Enum คลาส
ไม่สามารถแทนที่ค่าคงที่ของ Enum ได้สามารถลบล้างค่าคงที่ของคลาสได้
Enum ไม่สนับสนุนการสร้างวัตถุคลาสรองรับการสร้างออบเจ็กต์
Enum ไม่สามารถขยายคลาสอื่น ๆ ได้ชั้นเรียนสามารถขยายชั้นเรียนอื่น ๆ
enum คใช้อินเทอร์เฟซคลาสสามารถใช้อินเทอร์เฟซ


ตัวอย่างการปฏิบัติของ Enum

ตอนนี้เพื่อให้เข้าใจ 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' และเราจะติดต่อกลับโดยเร็วที่สุด