Lợi ích của sử dụng enum trong Java

Chào mừng các bạn đã quay trở lại với thachleblog. Cuối tuần vừa rồi mình dành khá nhiều thời gian để suy ngẫm về cuộc đời, thế nên chẳng còn mấy thời gian để mà viết blog, haha.

Thành thật với bản thân mà nói thì sau khi hoàn thành một bài blog thì mình cũng cảm thấy vui vui, đó là động lực để mình tiếp tục tìm hiểu và chia sẻ. Sẽ có một lúc nào đó mình hết thấy vui, lúc đó sẽ không viết nữa, mà chuyện đó thì để tính sau ha :D.

Lan man chém gió thế đủ rồi, vào chủ đề chính thôi, bài viết hôm nay mình sẽ cùng các bạn tìm hiểu về lợi ích của sử dụng enum trong Java. Enum thì mình đã biết từ lâu mà ít khi sử dụng, trước giờ code mà cứ có nhiều constant thì tạo một class Utils rồi cứ public statis final… là lá la. Dạo gần đây đọc code thấy enum sử dụng khá nhiều. Thế là mình quyết tâm tìm hiểu xem sử dụng enum nó có lợi ích gì so với cách mà trước giờ mình vẫn xài, để mà thay đổi cho prồ với người ta. Thế là có bài chia sẻ cho các bạn luôn, bắt đầu nào.

Giới thiệu một chút về enum

enum java

Enum được thêm vào từ phiên bản Java 5, là kiểu dữ liệu đặc biệt trong đó có các variables là những contants. Enum được sử dụng như là một class, do đó enum có thể có instance variable, method và có thể implement interface… Tuy nhiên, cần chú ý là enum đã được extends từ java.lang.Enum, do đó, enum không thể extend class khác (vì Java không hỗ trợ đa kế thừa) thử đi, báo lỗi liền đó.

Ví dụ enum

  1. package thach.le.enumexample;
  2. public enum EnumSeason {
  3. WINTER, SPRING, SUMMER, FALL;
  4. }

Tại sao cần dùng Enum

Phần hấp dẫn nhất là đây, quan trọng nhất vẫn là tại sao cần dùng enum, không thể thấy người khác xài thì mình cũng xài được. Vì như mình nói ở trên, chúng ta không cần sử dụng enum mà có thể sử dụng class constants như sau:

  1. package thach.le.enumexample;
  2. public class ContantsSeason {
  3. public static final int SEASON_WINTER = 0;
  4. public static final int SEASON_SPRING = 1;
  5. public static final int SEASON_SUMMER = 2;
  6. public static final int SEASON_FALL = 3;
  7. }

 

Ta cùng phân tích lợi ích khi dùng enum thay thế cho constants variable trong class:

  • Type – safe: để dễ hiểu khái niệm type – safe, mình sẽ phân tích ví dụ trên. Class constants có các constant variables là kiểu int. Vì là kiểu int nên ta có thể thao tác với các “Season” như một int variable. Điều này chính là not type – safe. Enum xuất hiện để giải quyết vấn đề này. Khi enum là “WINTER” nó sẽ mang ý nghĩa là “winter” và ta không thể thao tác như một int hoặc string variable.
  • Namespace: với constants variable ta cần định nghĩa tên tránh conflict với constants khác, ví dụ ở trên ta cần phải có SEASON_ (với mình lợi ích này không mang lại nhiều value lắm)
  • Sử dụng trong switch – case: một trong những lợi ích nổi trội nhất của enum là cho phép sử dụng như variable trong switch – case. Khả năng này khá là hữu dụng trong trường hợp có nhiều constants (if – else nhiều mệt 😀 )
  • Dễ dàng maintain: đối với ví dụ về class constants, khi thêm mới constant variable, có thể sẽ ảnh hưởng đến các constants khác. Đối với enum thì không.

Qua các lợi ích trên thì chúng ta chắc chắn nên sử dụng enum thay thế cho constants rồi đấy. Các bạn có thể tham khảo thêm về lợi ích của sử dụng enum trong Java thay thế cho int constant trong Item 30: Use enums instead of int constants Effective Java, 2nd Edition (mình đọc đi đọc lại mà chưa rõ lắm, hehe). Hẹn gặp lại các bạn ở các bài viết sau nhé.

Tham khảo thêm:
http://docs.oracle.com/javase/1.5.0/docs/guide/language/enums.html