1. 程式人生 > >java成神之——enum枚舉操作

java成神之——enum枚舉操作

serializa ali over case values ride 代碼 ide HERE

  • 枚舉
    • 聲明
    • 枚舉遍歷
    • 枚舉在switch中使用
    • 枚舉比較
    • 枚舉靜態構造方法
    • 使用類來模擬枚舉
    • 枚舉中定義抽象方法
    • 枚舉實現接口
    • 單例模式
    • 使用靜態代碼快
    • EnumSet
    • EnumMap
    • 結語

枚舉

聲明

基本使用
public enum ChineseNumber {
    YI,
    ER,
    SAN,
    SI
}

ChineseNumber.values(); // ["YI","ER","SAN","SI"]

枚舉遍歷

for (ChineseNumber s : ChineseNumber.values()) {
    System.out.println(s.name());
}

枚舉在switch中使用

ChineseNumber s = ChineseNumber.ER;

switch(s) {
    case YI:
    System.out.println("一");
    break;
    case ER:
    System.out.println("二");
    break;
    case SAN:
    System.out.println("三");
    break;
    case SI:
    System.out.println("四");
    break;
}

枚舉比較

Boolean b = ChineseNumber.YI == ChineseNumber.ER;
Boolean b = ChineseNumber.YI.equals(ChineseNumber.ER);

枚舉靜態構造方法

public enum ChineseNumber {
    YI(1),
    ER(2),
    SAN(3),
    SI(4);
    private int value;
    ChineseNumber(int value) {
        this.value = value;
    }
    public int getValue() {
        return value;
    }
}

ChineseNumber.YI.getValue(); // 1

使用類來模擬枚舉

class MyEnum<T extends MyEnum<T>> implements Comparable<T>, Serializable{
    public static final MyEnum ONE = new MyEnum(1);
    public static final MyEnum TWO = new MyEnum(2);
    public static final MyEnum THERE = new MyEnum(3);
    public static final MyEnum FOUR = new MyEnum(4);
    private int value;

    private MyEnum(int value){
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

MyEnum.TWO.getValue();

枚舉中定義抽象方法

public enum MyAction {
        
    fn {
        public String execute() {
            return "execute this method";
        }
    };

    public abstract String execute();
};

MyAction.fn.execute();

枚舉實現接口

public enum RegEx implements Predicate<String> {
    LETTERS("[a-zA-Z]+");
        
    private final Pattern pattern;
    private RegEx(final String pattern) {
        this.pattern = Pattern.compile(pattern);
    }
    @Override
    public boolean test(final String input) {
        return this.pattern.matcher(input).matches();
    }
}


RegEx.LETTERS.test("abc");

或者

public enum RegEx implements Predicate<String> {
    ISLETTERS {
        @Override
        public boolean test(final String input) {
            return Pattern.compile("[a-zA-Z]+").matcher(input).matches();
        }
    };
}

RegEx.ISLETTERS.test("abc");

單例模式

枚舉是實現單例模式目前最好最優的方法

枚舉被引用時才會實例化

public enum MySingletonPattern {
    Loneliness;

    private MySingletonPattern () {}

    public String SomeWords() {
        return "I am so lonely";
    }
}

MySingletonPattern.Loneliness.SomeWords();

使用靜態代碼快

public enum EnglishWord {
    a,b,c,d;

    private String upper;
    String getUpper() {
        return upper;
    }
    static {
        a.upper = "A";
        b.upper = "B";
        c.upper = "C";
        d.upper = "D";
    }
}
EnglishWord.a.getUpper();

EnumSet

EnumSet<EnglishWord> set = EnumSet.range(EnglishWord.a, EnglishWord.b); // 取枚舉部分值from...to

EnumSet<EnglishWord> set = EnumSet.of(EnglishWord.a);

EnumMap

public enum EnglishLowerWord {
    a, b, c;
}
public enum EnglishUpperWord {
    A, B, C;
}

EnumMap<EnglishLowerWord, EnglishUpperWord> map = new EnumMap<EnglishLowerWord, EnglishUpperWord>(EnglishLowerWord.class);
map.put(EnglishLowerWord.a, EnglishUpperWord.A);
map.put(EnglishLowerWord.b, EnglishUpperWord.B);
map.put(EnglishLowerWord.c, EnglishUpperWord.C);

結語

本文章是java成神的系列文章之一

如果你想知道,但是本文沒有的,請下方留言

我會第一時間總結出來並發布填充到本文

java成神之——enum枚舉操作