一、枚舉
我們所定義的每個枚舉類型都繼承自java.lang.Enum類盒粮。枚舉中的每個成員默認(rèn)都是publiic static final的奠滑。而每個枚舉的成員就是我們定義的枚舉類型中的一個實例妒穴。換句話說种呐,當(dāng)定義了一個枚舉類型后爽室,在編譯時刻就能確定該枚舉類型有幾個實例淆攻,分別是什么。在運(yùn)行期間我們無法再使用給枚舉類型創(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));
}
}