enum trong java

Enum trong Java có gì hay?

Written by IT Phú Trần on 06/04/2018 in JAVA CORE and LẬP TRÌNH JAVA with 21 comments.

Từ phiên bản Java 5, Java cho ra đời kiểu dữ liệu đặc biệt trong Java đó chính là Enum.  Vậy Enum là gì? Nó có gì hay không trong việc sử dụng và áp dụng? Bài viết này xin tự định nghĩa và chia sẻ riêng  những lý thuyết theo cá nhân hiểu qua kinh nghiệm.



Bài viết này đọc xong thì được gì? Tôi mong muốn khi đã bỏ thời gian ra thì phải đạt được kết quả chứ không thể mung lung như một trò đùa.

enum trong java
enum trong java

1. Enum là gì?

Enum là một kiểu dữ liệu đặc biệt của Java, thường sử dụng cho việc định nghĩa một tập hợp cho các hằng số có giá trị cố định. Nhưng theo tôi đúng nhưng thiếu. “Nó định nghĩa các object cố định, nhưng giá trị của các thuộc tính chưa hẳn đã cố định và do chúng ta tùy biến sử dụng,  ở phần cuối bài các bạn sẽ thấy được vấn đề này!”.

Enum nó được xem như là một Class thông thường, vì sao? Vì nó cũng có các thuộc tính, các method và có cả Constructor.

Enum trong java là một kiểu dữ liệu đặc biệt của Java được sử dụng để định nghĩa các tập hợp các hằng số. Cụ thể hơn, Java enum là một kiểu đặc biệt của lớp trong java. Một enum có thể chứa các trường, phương thức và Constructor cho nên là một class. Nhưng các bạn lưu ý giúp mình nó khác class ở chỗ là Một class tạo ra extends từ Object, riêng với Enum nó extends từ  java.lang.Enum. Do đó enum không thể extends một class nào khác đơn giản vì java không hỗ trợ đa kế thừa.

2.Vì sao Enum được ra đời?

Bài toán đặt ra rằng chúng ta có  4 mùa trong năm là cố định. Viết phương thức kiểm tra nếu là mùa xuân thì đơn giản chỉ in ra mùa ăn chơi, còn lại chúng ta in ra mùa phải vất cả kiếm tiền!

Bài làm như sau:

class  Season.java

class Ex1.java

Đây là một trong những cách chúng ta hay làm và tất nhiên các này là hoàn toàn chính xác đề giải quyết bài toán trên. Tuy nhiên có 2 điều bất cập khi sử dụng cách trên mà ta cần giải quyết là:

1.Gía trị mà người dùng cho vào method getJob là một chuỗi bất kỳ, không phải là 1 trong bốn giá trị cho 4 mùa trên.

2.Ngay tại class Season thì khi lập trình chúng ta có thể cho giá trị có thể viết nhầm trùng nhau, dẫn đến kết quả logic không chính xác.

Vậy để khắc phục hai nhược điểm trên Enum ra đời:

chúng ta có thể khắc phúc bằng cách sử dụng như sau:

class Season.java

class Ex2.java




Như vậy, các bạn thấy rằng, với enum thì ở enum Season nó không thể trùng giá trị, nếu cố tính cho cùng một giá trị mà chúng ta định nghĩa thì ngay tập tức báo lỗi trong thời gian compile do IDE hỗ trợ.

Thứ 2, tham số truyền vào phải là một trong 4 giá trị trên trong enum Season.

Với enum thì nó là danh sách các object cố định. Như vậy chúng ta cần phải biết trước các object, như ví dụ trên, chúng ta có 4 object tương ứng với bốn mùa.

Một khi đã gọi enum sử dụng thì nó sẽ tạo ra tất cả các object do mình khai báo trong enum đó,

Và đôi khi với mỗi mùa thì nó lại có mã của mùa đó và tên tiếng việt, tiếng anh. Như vậy chúng ta phải làm bằng cách nào?

Như tôi nói ở phần đầu bài, nó cũng giống như một class, có các thuộc tính và constructor cho nên tôi xử lý như sau:

Ex2.java sử dụng như sau:

Như vậy, các bạn thấy rằng, như ở phần đầu bài các object thì cố định nhưng giá trị thuộc tính của các object đó cót thay đổi không?  Như ví dụ trên, ta setMa là object seasonSP thì  giá trị của thuộc tính mã đó sẽ thay đổi.

3.Enum hay là hay cái gì?

Theo tôi thì có hai lợi ích chính mà cần phải lưu ý:

Trước JDK7 thì Java hỗ trợ 2 loại switch case thôi, một là kiểu int hai là kiểu enum.

Cho nên với trường hợp muốn kiểm tra mùa trong năm sau đó in ra mùa đó chẳng hạn thì ta phải if else nhiều lần, thay vì như vậy sử dụng:

Với những phân tích trên mình nghĩ các bạn đã nắm được enum rồi , nhưng bây giờ hãy cùng nhau trả lời một số câu hỏi phỏng vấn xem thử nhé:

Câu hỏi phỏng vấn về enum trong java thường gặp:

1.Chúng ta có thể tạo ra thể hiện của enum bằng từ khoá new không?

Trả lời: Không, bởi vì nó chỉ có các Constructor private.

2. Chúng ta có thể khai báo phương thức trừu tượng trong enum không?

Có, chúng ta có thể có các phương thức trừu tượng và có thể cung cấp việc thực hiện các phương thức này. (Thằng này mình nghĩ nó ít áp dụng và ít dùng)

3. Lợi ích của việc sử dụng enum so với việc khai báo public static final là gì? 

Hai cách hầu như tương tự nhau, tuy nhiên trường hợp khi khai báo là public static final thì nó chỉ lưu trữ duy nhất một giá trị, nhưng với enum nó có thể lưu được 1 object, nhiều thuộc tính khác nhau như ví dụ 4 mùa trong năm.


Qua bài viết này, Enum là gì? lợi ích của enum là gì? áp dụng như thế nào? Mình nghĩ các bạn đã năm chắc rồi đúng không?  Nếu có một ai đó hỏi về enum hãy trả lời nhanh, ngắn gọn, xúc tích! Xin chào và hẹn gặp lại các bạn qua những bài viết sau nhé.



21 Responses to “Enum trong Java có gì hay?

  1. Xem tutorials của người có kinh nghiệm thực tế nó hay hơn những bài viết sách vở, học thuật nhiều. Cảm ơn anh.

  2. I am not sure the place you’re getting your info, however great topic.
    I needs to spend some time finding out much more or understanding more.
    Thanks for magnificent info I was on the lookout
    for this info for my mission.

  3. I do accept as true with all the concepts you’ve offered in your post.
    They are very convincing and can certainly work.

    Still, the posts are too quick for novices. May you please prolong them a little from next
    time? Thank you for the post.

  4. I read this piece of writing completely on the topic of the difference of newest and preceding
    technologies, it’s remarkable article.

  5. I feel this is among the so much significant information for me.
    And i’m glad studying your article. But should observation on some normal
    issues, The site style is ideal, the articles is actually excellent : D.
    Just right activity, cheers

  6. Hmm is anyone else encountering problems with the pictures on this blog loading?
    I’m trying to find out if its a problem on my end or if it’s the blog.

    Any feedback would be greatly appreciated.

  7. My partner and I stumbled over here from a different web address and thought I should check things out.
    I like what I see so i am just following you.
    Look forward to checking out your web page again.

  8. Howdy! Someone in my Myspace group shared this website with
    us so I came to take a look. I’m definitely enjoying the information. I’m book-marking and will be tweeting this to my followers!
    Excellent blog and brilliant design.

  9. I just want to tell you that I’m all new to weblog and definitely savored your blog site. Most likely I’m likely to bookmark your website . You certainly have superb writings. Appreciate it for sharing your webpage.

  10. We’re a gaggle of volunteers and opening a new scheme in our community.
    Your web site offered us with useful info to work on. You
    have performed a formidable activity and our entire neighborhood will probably
    be thankful to you.

    Here is my page; bola4dwin.com

  11. I think this is among the most vital information for me.
    And i’m glad reading your article. But should remark on few general things,
    The web site style is perfect, the articles is really excellent :
    D. Good job, cheers

  12. I all the time used to study paragraph in news papers but
    now as I am a user of net so from now I am using net for content, thanks to web.

  13. This piece of writing presents clear idea in support of the new viewers of blogging, that really how to do running a blog.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *