枚舉

一、枚舉

我們所定義的每個枚舉類型都繼承自java.lang.Enum類。枚舉中的每個成員默認都是publiic static final的。而每個枚舉的成員就是我們定義的枚舉類型中的一個實例。換句話說,當定義了一個枚舉類型后,在編譯時刻就能確定該枚舉類型有幾個實例,分別是什么。在運行期間我們無法再使用給枚舉類型創(chuàng)建新的實例。

1、 枚舉類型提供了兩個有用的的靜態(tài)方法values()和valueOf().我們可以很方便的使用它們,例如

//values方法使用,Color是一個枚舉
for(Color color : Color.values())
            System.out.println(color);

//valueOf()方法將一個字符串轉(zhuǎn)換成對應(yīng)的枚舉類型
Color color = Color.valueOf("RED");

2、枚舉類型也提供了構(gòu)造方法,以及get和set方法

public enum Coin
{
    penny("hello"), nickel("world"), dime("welcom"), quater("hello world");
    
    private String value;
    
    //枚舉的get方法
    public String get()
    {
        return this.value;
    }
    
    //枚舉的set方法
    public void set(String value)
    {
        this.value = value;
    }
    
    //枚舉的構(gòu)造方法
    Coin(String value)
    {
        this.value = value;
    }
    
    public static void main(String[] args)
    {
        System.out.println(Coin.quater.get());
        
        quater.set("nihao");
        System.out.println(Coin.quater.get());
    }
}

3 、EnumSet集合簡介

/**
 * EnumSet的用法
 *
 */
enum FontConstant
{
    Plain, Bold, Italilc, Heelo;    
}

public class EnumSetDemo
{
    public static void showEnumSet(EnumSet<FontConstant> enumSet)
    {
        for(Iterator<FontConstant> iterator = enumSet.iterator(); iterator.hasNext();)
        {
            FontConstant temp = iterator.next();
            System.out.println(temp);
        }
    }
    
    public static void main(String[] args)
    {
        //EnumSet.noneOf()方法使用給定的枚舉類型構(gòu)造一個EnumSet
        EnumSet<FontConstant> enumSet = EnumSet.noneOf(FontConstant.class);
        
        // EnumSet.of()使用給定參數(shù)構(gòu)造一個EnumSet
        enumSet = EnumSet.of(FontConstant.Bold);
        showEnumSet(enumSet);
        
        System.out.println("-----------------");
        //EnumSet.complementOf()使用總的枚舉類型減去給定參數(shù)剩下的枚舉類型
        //構(gòu)造一個EnumSet
        System.out.println(EnumSet.complementOf(enumSet));
        
    
    }
}

4、EnumMap簡介

import java.util.EnumMap;
import java.util.Map;

/**
 * EnumMap簡介
 *
 */
public class EnumMapDemo
{
    public static void main(String[] args)
    {
        //EnumMap的key值是枚舉類型,且構(gòu)造方法的參數(shù)也必須為枚舉類
        Map<Action, String> map = new EnumMap<>(Action.class);
        map.put(Action.TURN_LEFT, "向左轉(zhuǎn)");
        map.put(Action.TURN_RIGHT, "向右轉(zhuǎn)");
        map.put(Action.SHOOT, "開槍");
        
        for(Action action : Action.values())
        {
            System.out.println(action + " : " + map.get(action));
        }
    }
}

enum Action
{
    TURN_LEFT, TURN_RIGHT, SHOOT;
}

二、利用枚舉模擬權(quán)限管理


/**
 * 枚舉定義幾個權(quán)限角色
 *
 */
public enum AccessRight
{
    MANAGER, DEPARTMENT, EMPLOYEE;
}
/**
 * 模擬權(quán)限檢驗
 *
 */
public class AccessControl
{
    public static boolean checkRight(AccessRight accessRight)
    {
        if (accessRight == AccessRight.MANAGER)
            return true;
        else if (accessRight == AccessRight.DEPARTMENT) 
            return true;
        else 
            return false;
    }
    
    public static void main(String[] args)
    {
        //valueOf()方法將一個字符串轉(zhuǎn)換成對應(yīng)的枚舉類型
        AccessRight accessRight = AccessRight.valueOf("MANAGER");
        
        System.out.println(checkRight(accessRight));
    }
}

上一篇:可變參數(shù)與靜態(tài)導(dǎo)入
下一篇:JAVA語言反射機制

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載:https://segmentfault.com/a/1190000007688908 枚舉類 實例有限而且...
    ALEXIRC閱讀 657評論 0 0
  • Java 1.5發(fā)行版本新增了兩個引用類型家族:枚舉類型(Enumerate類)和注解類型(Annotation接...
    Timorous閱讀 463評論 0 0
  • 枚舉的特性 枚舉的特性,歸結(jié)起來就是一句話: 除了不能繼承,基本上可以將 enum 看做一個常規(guī)的類。 但是這句話...
    java部落閱讀 413評論 0 2
  • 一 Java 枚舉7常見種用法DK1.5引入了新的類型——枚舉。在 Java 中它雖然算個“小”功能,卻給我的開發(fā)...
    歡樂時光歡樂你我閱讀 913評論 0 6
  • 第一回,恨年年燈月,照人孤另,虛渡芳華,夢中人何處。 月色朦朧,不知深淺,且看人間此處。 “顧笙兄,今夜元宵,何...
    遺落后塵閱讀 202評論 1 1

友情鏈接更多精彩內(nèi)容