Java enum 列舉還可以這麼用
本文由碼農網 – 小峰原創,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃!
在大部分程式語言中,列舉型別都會是一種常用而又必不可少的資料型別,Java中當然也不會例外。然而,Java中的Enum列舉型別卻有著許多你意想不到的用法,下面讓我們一起來看看。
1、可以在enum中新增變數和方法
先來看一段程式碼示例:
public enum State { Normal("正常態", 1), Update("已更新", 2), Deleted("已刪除", 3), Fired("已遮蔽", 4); // 成員變數 private String name; private int index; // 構造方法,注意:構造方法不能為public,因為enum並不可以被例項化 private State(String name, int index) { this.name = name; this.index = index; } // 普通方法 public static String getName(int index) { for (State c : State .values()) { if (c.getIndex() == index) { return c.name; } } return null; } // get set 方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } }
從上面的程式碼中我們可以看到,定義完列舉值,然後在其後面加上分號,接著就可以定義其他的變數、方法了。另外需要特別說明的是,enum中的構造方法不可以用public標識,這樣做是為了防止使用者例項化enum。
2、可以用來定義常量
先來回顧一下Java中如何定義常量吧,看下面一段程式碼:
public static final int normalState = 1; private static final int updateState = 2;
下面我們還可以用enum列舉來代替上面的常量定義,程式碼如下:
public enum State { Normal, Update, Deleted, Fired }
在Java中用enum來定義常量在語法上沒有什麼優勢,但是enum列舉型別可以提供更多的操作功能。
3、在enum中實現介面
先來看下面一段程式碼:
public interface ICanReadState { void read(); String getState(); } public enum State implements ICanReadState { Normal("正常態", 1), Update("已更新", 2), Deleted("已刪除", 3), Fired("已遮蔽", 4); private String name; private int index; private State(String name, int index) { this.name = name; this.index = index; } // 介面方法1 @Override public String getState() { return this.name; } // 介面方法2 @Override public void read() { System.out.println(this.index + ":" + this.name); } }
和一般的類中使用介面一樣,enum列舉中同樣可以繼承介面,並實現介面中的所有方法,這樣做的好處在於可以更方便地對列舉中的值進行排序、比較等操作,封裝性更好。
總結
說白了,enum列舉型別是一個不可以被繼承的final類,就以上面的State列舉為例,如果你檢視enum型別的位元組碼,其實是State型別的類靜態常量。
本文連結:http://www.codeceo.com/article/java-enum-usage.html
本文作者:碼農網 – 小峰
[ 原創作品,轉載必須在正文中標註並保留原文連結和作者等資訊。]
相關文章
- java列舉原來還能這麼用Java
- Java 列舉(enum)Java
- Java列舉enum可以有抽象方法! -RecepİnançJava抽象NaN
- Java - Enum 列舉型別Java型別
- Java —— 列舉類(enum 類)Java
- Java 列舉 enum 詳解Java
- java基礎:enum列舉Java
- java中列舉(Enum)使用Java
- 再談java列舉enumJava
- 聊一聊Java的列舉enumJava
- TypeScript 列舉enumTypeScript
- Java enum列舉類詳解 列舉的常見用法Java
- java enum(列舉)使用詳解 + 總結Java
- ENUM列舉型別型別
- iOS - OC Enum 列舉iOS
- Java列舉:小小enum,優雅而乾淨Java
- 關於Java中列舉Enum的深入剖析Java
- JAVA 基礎 - ENUM 列舉的簡單使用Java
- 【python】Enum 列舉類Python
- Java列舉型別enum的詳解及使用Java型別
- 聊聊TypeScript中列舉物件(Enum)TypeScript物件
- mysql之ENUM列舉型別MySql型別
- 認知列舉(C# Enum)C#
- Rust的列舉型別EnumRust型別
- Java 列舉(enum) 詳解7種常見的用法Java
- 從JDK角度認識列舉enumJDK
- 透過列舉enum實現單例單例
- C++typedef宣告,enum列舉型別C++型別
- Kotlin-17.列舉類(enum class)Kotlin
- C/C++列舉enum分別列印輸出列舉子和列舉值的方法C++
- [譯] CSS border-radius 還可以這麼用?CSS
- 使用列舉ENUM替換Switch或If-Else
- Java列舉Java
- Java 列舉、JPA 和 PostgreSQL 列舉JavaSQL
- 你知道Javascript還可以這麼玩耍滴麼?JavaScript
- Enum列舉型別實戰總結,保證有用!型別
- C# Enum列舉型別操作擴充套件類C#型別套件
- 優雅使用前端列舉Enum,符合國標的那種!前端