Hướng dẫn sử dụng Java Enum: Nó là gì và Cách triển khai nó?



Bài viết Hướng dẫn sử dụng Java Enum này sẽ cung cấp cho bạn kiến ​​thức chi tiết về hằng Enum cùng với các ví dụ thực tế để bạn hiểu rõ hơn.

Các Liệt kê trong là một cách định nghĩa một lớp với các hằng số cố định và được đặt tên với sử dụng từ khóa enum. Trong này “ Hướng dẫn sử dụng Java Enum ”, Chúng ta sẽ học cáchxác định Enumeration cùng vớiví dụ để hiểu rõ hơn.

Enumeration là gì?

Java Enums là các lớp có một tập hợp các hằng số hoặc biến cố định không có xu hướng thay đổi. Việc liệt kê trong Java đạt được bằng cách sử dụng từ khóa enum. Java enum hằng số là tĩnhsau cùng ngầm hiểu. Tính năng Enum khả dụng kể từ Phiên bản JDK 1.5.





Tại sao chúng ta cần liệt kê?

enum cải thiện an toàn kiểu khi kiểm tra thời gian biên dịch để tránh lỗi trong thời gian chạy bằng cách tránh mã soạn sẵn. Ví dụ: nếu bạn phải chọn một khả năng trong số ít các tùy chọn có sẵn nhất, hãy nói,

Việc làm Kiểu: (Hợp đồng / Tạm thời / Dài hạn)



Nhân viên hướng dẫn Java enum

Sau đó, lựa chọn tốt nhất sẽ là sử dụng enum. Bởi vì enum có thể dễ dàng sử dụng trong công tắc. enum có thể được duyệt. enum có thể trường, hàm tạo và phương thức. Vì thế, nó tăng kiểm tra thời gian biên dịch và tránh lỗi do chuyển vào các hằng số không hợp lệ, vì bạn đã ghi lại giá trị nào là hợp pháp để được sử dụng.

Sự khác biệt giữa Enum và Class

Mặc dù một lớp và enum có chức năng tương tự trong môi trường Java, chúng khác nhau ở một số khía cạnh. Hãy để chúng tôi thảo luận về sự khác biệt



Enum Lớp học
Không thể ghi đè các hằng số enumHằng số lớp có thể bị ghi đè
Enum không hỗ trợ Tạo đối tượngHỗ trợ lớp tạo các đối tượng
Enum không thể mở rộng các lớp khácMột lớp có thể mở rộng các lớp khác
enum cmột giao diện triển khaiMột lớp có thể triển khai Giao diện


Ví dụ thực tế về Enum

Bây giờ, để hiểu enum theo cách tốt hơn nhiều, chúng ta hãy thực hiện một số ví dụ thực tế dựa trên những điều sau.

Định nghĩa phép liệt kê trong Java

Enum có thể được khai báo bên trong một lớp hoặc bên ngoài một cđể cho. Tuy nhiên, nó không thể được khai báo bên trong bất kỳ phương thức nào. Hãy lấy một ví dụ nhỏ để hiểu cú pháp, định nghĩa và khai báo của nó.

Cú pháp:

tên enum {hằng số}

Trong ví dụ này, chúng tôi đã khai báo chủ yếu() phương pháp phía trong enum

định nghĩa gói public class Edureka {enum Level {BAJA, KTM, YAMAHA} public static void main (String [] args) {Level myVar = Level.KTM System.out.println (myVar)}}

// Hết

KTM

Trong ví dụ này, chủ yếu() phương thức được khai báo ở ngoài của enum.

định nghĩa gói enum Color {BAJAJ, KTM, YAMAHA} public class Edureka {public static void main (String [] args) {Bike b1 = Color.YAMAHA System.out.println (b1)}}

// Đầu ra:

YAMAHA

Enum được sử dụng trong Switch Case

Phép liệt kê cũng có thể được sử dụng trong một câu lệnh switch. Điều quan trọng là tất cả các câu lệnh case phải sử dụng các hằng số từ cùng một enum như được sử dụng bởi câu lệnh switch. Hãy để chúng tôi kiểm tra một ví dụ dựa trên điều này.

menu thả xuống trong anglejs

Ở đây, chúng ta sẽ khai báo một enum với các ngày trong tuần là các phần tử của nó và chúng ta sẽ chuyển dữ liệu dưới dạng một chuỗi để in ra dữ liệu của trường hợp khớp.

gói đã chuyển sang Ngày {SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY} hạng công khai Edureka {Day day public Edureka (Day day) {this.day = day} public void dayIsLike () {switch (day) {case THỨ HAI: Trường hợp ngắt System.out.println ('Xin chào, Hôm nay là Thứ Hai') THỨ HAI: System.out.println ('Xin chào, Hôm nay là Thứ Ba') THỨ TƯ: System.out.println ('Xin chào, Hôm nay là Thứ Tư ') break case THỨ NĂM: System.out.println (' Xin chào, Hôm nay là Thứ Năm ') break case THỨ SÁU: System.out.println (' Xin chào, Hôm nay là Thứ Sáu. ') break case THỨ 7: System.out.println (' Xin chào, Hôm nay là ngày cuối tuần của bạn ') break case CHỦ NHẬT: System.out.println (' Xin chào, Hôm nay là ngày lễ ') mặc định ngắt: System.out.println (' Vui lòng nhập một ngày hợp lệ. ') Break}} public static void main (String [] args) {String str = 'MONDAY' Edureka e1 = new Edureka (Day.valueOf (str)) e1.dayIsLike ()}}

// Đầu ra:

Xin chào, hôm nay làThứ hai

Kế thừa sử dụng enum

Về cơ bản, bất kỳ enum được biểu diễn dưới dạng một lớp mở rộng lớp trừu tượng java.lang. Enum và có một số thành viên tĩnh. Do đó, một enum không thể mở rộng bất kỳ lớp nào khác hoặc enum không có bội số thừa kế . Hãy để chúng tôi thực hiện một ví dụ để hiểu nó theo cách tốt hơn.

Ở đây, chúng tôi sẽ kế thừa hệ điều hành dựa trên nhà sản xuất điện thoại.

cách cài đặt php 7 trên windows 10
gói kế thừa import java.util.ArrayList import java.util.List public class Edureka {public static void main (String [] args) {List inherit = new ArrayList () inherit.add (LibraryEnum.FIRST) inherit.add (ClientEnum. google) for (HTTPMethodConvertible element: inherit) {System.out.println (element.getHTTPMethodType ())}} giao diện tĩnh HTTPMethodConvertible {public String getHTTPMethodType ()} static enum LibraryEnum triển khai HTTPMethodConvertible {FIRST ('Google Pixel') 'Huawei'), THIRD ('Apple 11 Pro') Chuỗi httpMethodType LibraryEnum (Điện thoại chuỗi) {httpMethodType = phone} public String getHTTPMethodType () {return httpMethodType}} static enum ClientEnum triển khai HTTPMethodConvertible, apple {huawei ('iOS'), google ('Android One') Chuỗi httpMethodType ClientEnum (Chuỗi s) {httpMethodType = s} chuỗi công khai getHTTPMethodType () {return httpMethodType}}}

// Đầu ra:

Google Pixel
Android One

Enum với các giá trị tùy chỉnh

Enums có các giá trị chuỗi riêng theo mặc định, chúng tôi cũng có thể gán một số giá trị tùy chỉnh cho enums. Chúng ta hãy xem xét ví dụ dưới đây.

vi Lưu lượng truy cập {RED (“STOP”), ORANGE (“WAIT”), GREEN (“GO”)}

Trong ví dụ trên, chúng ta có thể thấy rằng Traffic enum có ba thành viên. Cụ thể,

CAM ĐỎMÀU XANH LÁ có các giá trị tùy chỉnh khác nhau của riêng họ DỪNG LẠI, CHỜĐI tương ứng.

Bây giờ để sử dụng cùng một loại enum trong mã, chúng tôi dự kiến ​​sẽ tuân theo một số điểm sau:

  • Chúng ta cần tạo hàm tạo tham số hóa cho lớp enum này. Bởi vì chúng tôi biết rằng enum Đối tượng của lớp không thể được tạo một cách rõ ràng, vì vậy để khởi tạo, chúng tôi sử dụng phương thức khởi tạo được tham số hóa.
  • Các người xây dựng không thể là công chúng hoặc được bảo vệ nó phải có riêng tư hoặc là mặc định bổ ngữ. Nếu chúng tôi tạo công khai hoặc được bảo vệ, nó sẽ cho phép khởi tạo nhiều hơn một đối tượng hoàn toàn chống lại chức năng enum.
  • Chúng ta phải tạo một phương thức getter để nhận giá trị của enums.

Hãy để chúng tôi thực hiện một chương trình dựa trên điều này.

package traffic enum TrafficSignal {RED ('STOP'), GREEN ('GO'), ORANGE ('WAIT') private String action public String getAction () {return this.action} private TrafficSignal (String action) {this.action = action}} public class Edureka {public static void main (String args []) {TrafficSignal [] signal = TrafficSignal.values ​​() for (TrafficSignal signal: signal) {System.out.println ('name:' + signal.name () + 'action:' + signal.getAction ())}}}

// Đầu ra:

tên: Hành động RED: DỪNG
tên: Hành động XANH: ĐI
name: ORANGE action: WAIT

Thêm vào các câu lệnh if-else-if

Bây giờ, chúng ta hãy thực thi một chương trình dựa trên enum trong các câu lệnh if-else-if. Ở đây, chúng ta sẽ tìm hướng truyền bằng cách chuyển các giá trị của hướng có sẵn trong 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 (' Hướng: Nam ')}}}

// Đầu ra:

Nóiction: Bắc

Các phương pháp khác nhau được sử dụng với enum

Giá trị (): Khi bạn tạo một enum, Trình biên dịch Java nội bộ thêm giá trị () phương pháp. Phương thức này trả về một mảng chứa tất cả các giá trị của enum.

// Cú pháp:

public static enum-type [] giá trị ()

Chúng ta sẽ tìm ra giá trị chỉ mục của một phần tử cụ thể trong một mảng.

java hashset là gì
gói giá trị enum Color {RED, GREEN, BLUE} public class Edureka {public static void main (String [] args) {Color arr [] = Color.values ​​() for (Color col: arr) {System.out.println ( col + 'at index' + col.ordinal ())} System.out.println (Color.valueOf ('RED'))}}

// Đầu ra:

ĐỎ ở chỉ số 0
XANH ở chỉ số 1
BLUE ở chỉ mục 2
MẠNG LƯỚI

Giá trị của(): Điều nàyphương thức được sử dụng để trả về hằng số liệt kê có giá trị bằng được truyền như một đối số trong khi gọi phương thức này.

// Cú pháp:

public static enum-type valueOf (String str)

Ở đây, chúng ta sẽ tìm thấy chi phí của một chiếc điện thoại cụ thể dựa trên đầu vào mà chúng ta chuyển cho chuỗi.

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 ('Danh sách điện thoại di động:') cho (Điện thoại di động m: Mobile.values ​​()) {System.out.println (m + 'giá' + m.showPrice () + 'đô la' )} Mobile ret ret = Mobile.valueOf ('Samsung') System.out.println ('Đã chọn:' + ret)}}

// Đầu ra:

Samsung có giá 1099 đô la
Apple có giá 1250 đô la
Google có giá 1325 đô la
Đã chọn: Samsung

Ordinal (): Trình thông dịch Java thêm vào thứ tự () phương thức nội bộ khi nó tạo ra một enum. Phương thức ordinal () trả về mục lục của giá trị enum.

// Cú pháp:

public final int ordinal ()

Ở đây, chúng ta sẽ tìm ra giá trị chỉ mục của một phần tử cụ thể trong một mảng. và cả vị trí của quả anh đào.

Gói thứ tự enum Fruits {Apple, Banana, Cherry, Date, Elderberry} enum Vegetables {Carrot, Beetroot, Beans, Tomato, Onion} public class Edureka {public static void main (String [] args) {Fruits [] rid = Fruits. giá trị () for (Fruits fr: left) {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 + 'ra sau' + f1)} Vegetables v1 = Vegetables.Beetroot if (f1.equals (v1)) {System.out.println (' Không chính xác ')}}}

// Đầu ra:

Apple: 0
Chuối: 1
Cherry: 2
Ngày: 3
Cơm cháy: 4
Cherry đến sau Apple

Ưu điểm của Enum

  • Enum trong Java được cải thiện loại an toàn
  • Enum được thiết kế để dễ dàng sử dụng trong chuyển trường hợp
  • Enum có thể được đi ngang qua
  • Enum có thể có lĩnh vực, phương pháp,người xây dựng
  • Enum có thể thực hiện giao diện
  • Enum không thể mở rộng lớp học bởi vì nội bộ, nó mở rộng Enum lớp học

Enum Usecase: Rock, Paper, Scissors Game

Chúng tôi sẽ sử dụng enum trong Java để tạo trò chơi thời thơ ấu của chúng tôi, đá (đá) giấy và kéo . Đoạn mã sau giải thích cách thực hiện.

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 Hãy để chúng tôi bắt đầu ... n') trong khi (! gameOver) {System.out.printf ('% nScissor-Paper-Stonen') boolean validInput do {System.out.print ('n Đến lượt của bạn (Vui lòng nhập s để cắt kéo, p cho giấy, t cho đá, q để thoát): 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 ( 'nVui lòng kiểm tra thông tin đầu vào và thử lại! n') validInput = false}} while (! val idInput) if (! gameOver) {int aRandomNumber = random.nextInt (3) if (aRandomNumber == 0) {computerMove = HandSign.SCISSOR System.out.println ('nIt's My turn: SCISSORn')} else if (aRandomNumber = = 0) {computerMove = HandSign.PAPER System.out.println ('n Đến lượt tôi: PAPERn')} else {computerMove = HandSign.STONE System.out.println ('n Đến lượt tôi: 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 cắt giấy , I won! N ') ++ numComputerWon} else if (computerMove == HandSign.PAPER & amp & amp playerMove == HandSign.STONE) {System.out.println (' nPaper bọc đá, tôi đã thắng! N ') ++ numComputerWon} else if (computerMove == HandSign.STONE & amp & amp playerMove == HandSign.SCISSOR) {System.out.println ('nStone phá vỡ hình cắt kéo, tôi đã thắng! n') ++ numComputerWon} else {System.out.println ('nCông ơn. ..! Bạn đã thắng! N ') ++ numPlayerWon} ++ numTrials}} System.out.printf ('% nSố lần thử: '+ numTrials) System.out.printf (' Tôi đã thắng% d (%. 2f %%) . Bạn đã thắng% d (%. 2f %%).% N ', numComputerWon, 100.0 * numComputerWon / numTrials, numPlayerWon, 100.0 * numPlayerWon / numTrials) System.out.println (' Bye !, Hy vọng bạn thích ..! ' )}}

// Đầu ra:

Chúng ta hãy bắt đầu ...
Kéo-Giấy-Đá
Lượt của bạn (Vui lòng nhập s để cắt kéo, p cho giấy, t cho đá, q để thoát):
S
Đến lượt tôi: ĐÁ
Đá gãy cắt kéo, tôi thắng!
Kéo-Giấy-Đá
Lượt của bạn (Vui lòng nhập s để cắt kéo, p cho giấy, t cho đá, q để thoát):

Số lần thử: 1 Tôi thắng 1 (100,00%). Bạn đã thắng 0 (0,00%).
Bye !, Hy vọng bạn thích ..!

Với điều này, chúng ta đến phần cuối của Hướng dẫn Java Enum này. Tôi hy vọng bạn đã hiểu Enum trong Java và cách triển khai nó thông qua một số ví dụ thời gian thực.

Bây giờ bạn đã hiểu enum kiến thức cơ bản thông qua “Hướng dẫn sử dụng Java Enum” này, hãy xem của Edureka, một công ty học trực tuyến đáng tin cậy với mạng lưới hơn 250.000 người học hài lòng trải dài trên toàn cầu. Các khóa đào tạo và cấp chứng chỉ về Java J2EE và SOA của Edureka được thiết kế cho sinh viên và các chuyên gia muốn trở thành Nhà phát triển Java. Khóa học được thiết kế để cung cấp cho bạn khởi đầu về lập trình Java và đào tạo bạn về cả khái niệm Java cốt lõi và nâng cao cùng với các khung Java khác nhau như Hibernate & Mùa xuân .

Có một câu hỏi cho chúng tôi? Đề cập đến nó trong phần nhận xét của blog 'Hướng dẫn sử dụng Java' này và chúng tôi sẽ liên hệ lại với bạn sớm nhất có thể.