列舉
列舉
假設我們要定義一個人類,人類中包含姓名和性別。通常會將性別定義成字串型別,效果如下:
public class Person {
private String name;
private String sex;
public Person() {
}
public Person(String name, String sex) {
this.name = name;
this.sex = sex;
}
// 省略get/set/toString方法
}
public class Demo01 {
public static void main(String[] args) {
Person p1 = new Person("張三", "男");
Person p2 = new Person("張三", "abc"); // 因為性別是字串,所以我們可以傳入任意字串
}
}
不使用列舉存在的問題:可以給性別傳入任意的字串,導致性別是非法的資料,不安全。
列舉的作用與應用場景
列舉的作用:一個方法接收的引數是固定範圍之內的時候,那麼即可使用列舉。
列舉的基本語法
列舉是一種特殊類。列舉是有固定例項個數的型別,我們可以把列舉理解成有固定個數例項的多例模式。
定義列舉的格式
enum 列舉名 {
第一行都是羅列列舉例項,這些列舉例項直接寫大寫名字即可。
}
入門案例
- 定義列舉:BOY表示男,GIRL表示女
enum Sex {
BOY, GIRL; // 男,女
}
- Perosn中的性別有String型別改為Sex列舉型別
public class Person {
private String name;
private Sex sex;
public Person() {
}
public Person(String name, Sex sex) {
this.name = name;
this.sex = sex;
}
// 省略get/set/toString方法
}
- 使用是隻能傳入列舉中的固定值
public class Demo02 {
public static void main(String[] args) {
Person p1 = new Person("張三", Sex.BOY);
Person p2 = new Person("張三", Sex.GIRL);
Person p3 = new Person("張三", "abc");
}
}
列舉的其他內容
列舉的本質是一個類,我們剛才定義的Sex列舉最終效果如下:
enum Sex {
BOY, GIRL; // 男,女
}
// 列舉的本質是一個類,我們剛才定義的Sex列舉相當於下面的類
final class SEX extends java.lang.Enum<SEX> {
public static final SEX BOY = new SEX();
public static final SEX GIRL = new SEX();
public static SEX[] values();
public static SEX valueOf(java.lang.String);
static {};
}
列舉的本質是一個類,所以列舉中還可以有成員變數,成員方法等。
public enum Sex {
BOY(18), GIRL(16);
public int age;
Sex(int age) {
this.age = age;
}
public void showAge() {
System.out.println("年齡是: " + age);
}
}
public class Demo03 {
public static void main(String[] args) {
Person p1 = new Person("張三", Sex.BOY);
Person p2 = new Person("張三", Sex.GIRL);
Sex.BOY.showAge();
Sex.GIRL.showAge();
}
}
執行效果:
列舉的應用
列舉的作用:列舉通常可以用於做資訊的分類,如性別,方向,季度等。
列舉表示性別:
public enum Sex {
MAIL, FEMAIL;
}
列舉表示方向:
public enum Orientation {
UP, RIGHT, DOWN, LEFT;
}
列舉表示季度
public enum Season {
SPRING, SUMMER, AUTUMN, WINTER;
}
列舉實現單例設計模式
- 它不僅能避免多執行緒同步問題,而且還自動支援序列化機制,防止反序列化重新建立新的物件,絕對防止多次例項化。
- 並且這種方式是Effective Java的作者Josh Bloch提倡的使用方式.
public enum Singleton {
INSTANCE;
public void whateverMethod() {
}
}
相關文章
- Java 列舉、JPA 和 PostgreSQL 列舉JavaSQL
- 列舉和列舉的取值範圍
- Enumeration列舉
- 列舉類
- Java列舉Java
- scala 列舉
- C# 列舉與位列舉概述C#
- 列舉比較
- 列舉型別型別
- TypeScript 列舉指南TypeScript
- java列舉類Java
- 自定義列舉
- Java 列舉(enum)Java
- 列舉工具類
- Swift-列舉Swift
- TypeScript 列舉enumTypeScript
- Java列舉-通過值查詢對應的列舉Java
- Java enum列舉類詳解 列舉的常見用法Java
- springboot mybatis列舉配置(每次只需新增一個列舉類即可)Spring BootMyBatis
- 列舉子集的方法
- delphi 裡的 列舉
- 【python】Enum 列舉類Python
- TS — 列舉(詳解)
- java中的列舉Java
- 【java基礎】列舉Java
- ENUM列舉型別型別
- Java列舉解讀Java
- 【java】【列舉使用技巧】Java
- Java(4)列舉類Java
- iOS 列舉器NSEnumeratoriOS
- Java基礎--列舉Java
- golang 常量與列舉Golang
- C# 中的“智慧列舉”:如何在列舉中增加行為C#
- c++11 實現列舉值到列舉名的轉換C++
- OC中列舉寫法 以及 字串型別列舉實現探索字串型別
- 真香警告!擴充套件 swagger支援文件自動列舉所有列舉值套件Swagger
- 在C#中對列舉進行位運算--列舉組合C#
- rust學習七、列舉Rust