Thursday, January 5, 2017

Java Core - Enum Types


Enum là một kiểu dữ liệu đặc biệt, nó cho phép chứa tập hợp các biến hay còn gọi là kiểu dữ liệu liệt kê. Vậy tại sao lại có kiểu dữ liệu enum và nó sẽ giúp chúng ta như thế nào.
Mình sẽ lấy vị dụ như sau : Trong game thường có các vật phẩm tăng gold hay exp sau mỗi màn đánh. Mình định nghĩa một enum như sau :

  1. public enum EffectItem {
  2. EXP,GOLD;
  3. }
Ok vậy là ta có có một tập hợp các hiệu ứng khi sử dụng vật phẩm là tăng gold và exp. Nhưng ta vẫn chưa định nghĩa tăng bao nhiêu cả.Ta làm như sau:

  1. public enum EffectItem {
  2. EXP(20),GOLD(30);
  3.         private int value;// khai báo một biến value.

  4. EffectItem(int value) { //một contructor với tham số value
  5. this.value = value;
  6. }

  7. public int getValue() {//hàm lấy ra giá trị value
  8. return this.value;
  9. }
  10. }
Nhìn có vẻ đây là một class thực sự với thuộc tính value và contructor với đầu vào int. Còn dòng 2 như các thực thể được khởi tạo vơi các giá trị cụ thể 20,30.

Một vấn đề nữa, tôi muốn với mỗi giá trị của item ta sẽ có một mô tả tương ứng. Ta làm như sau:
  1. public enum EffectItem {
  2. EXP(20),GOLD(30);
  3.         private int value;// khai báo một biến value.

  4. EffectItem(int value) { //một contructor với tham số value
  5. this.value = value;
  6. }

  7. public int getValue() {//hàm lấy ra giá trị value
  8. return this.value;
  9. }
  10.         
  11.         public String getString() {// với mỗi giá trị của enum sẽ có mô tả tương ứng.
  12. switch (this) {
  13. case EXP:
  14. return "Tang EXP 20%";
  15. case GOLD:
  16. return "Tang EXP 30%";
  17. default:
  18. return "";
  19. }
  20. }
  21. }

Đến đây ta đã cơ bản tạo xong một enum. Vậy sử dụng nó như thế nào?
 - Vì enum là một kiểu dữ liệu vì vậy ta khai báo một thuộc tính của class cần dùng như sau:

  1. public class Item {
  2. private String name;
  3. private EffectItem effect;

  4. public Item(EffectItem effect) {
  5. this.effect = effect;
  6. }

  7. public String getName() {
  8. return name;
  9. }

  10. public void setName(String name) {
  11. this.name = name;
  12. }

  13. public EffectItem getEffect() {
  14. return effect;
  15. }

  16. public void setEffect(EffectItem effect) {
  17. this.effect = effect;
  18. }
  19. }
Sử dụng phương thức effect.getValue() để lấy ra giá trị của enum và  effect.getString() để có được mô tả.
Ngoài ra, bản thân enum có một class mô tả nó với các phương thức và thuộc tính. Ví dụ như:  values() : trả về tập 1 mảng chứa cả các giá trị của enum. Ta có thể dùng vòng foreach để duyệt.

Done. Mong bài viết sẽ có ích với các bạn :D

3 comments:

  1. Thanks for the great information you have provided!Wow I can say that this is another great article as expected of this blog.Thanks for sharing.
    Discount master by autoketing, Discount master app,k best autoketing app

    ReplyDelete
  2. This is a great inspiring article. I don't know what to say except that I have enjoyed reading.Some genuinely interesting info , well written and loosely user pleasant.
    Shipping Bar for Shopify App Shipping Bar Master app autoketing

    ReplyDelete