1. enum用于常量
class="java" name="code">
在JDK1.5之前可以使用public static final来定义常量,现在可以使用enum,而且枚举提供了比常量更多的方法。
public enum Color{
Red, White, Blue, Black
}
public class ColorTest{
public static void main(String[] args){
Color myColor = Color.Blue;
System.out.println(myColor);
System.out.println("----------------");
for(Color color : Color.values()){
System.out.println(color);
}
}
}
运行结果:
Blue
----------------
Red
White
Blue
Black
2. enum使用switch
enum使用switch,可以提高代码的可读性。
public class EnumTest{
public static void doOp(OpConstant opConstant){
switch (opConstant){
case TURN_LEFT:
System.out.println("向左转");
break;
case TURN_RIGHT:
System.out.println("向右转");
break;
case SHOOT:
System.out.println("射击");
break;
}
}
public static void main(String[] args){
doOp(OpConstant.TURN_LEFT);
}
}
enum OpConstant{
TURN_LEFT, TURN_RIGHT, SHOOT
}
运行结果:
向左转
3. enum中添加新方法
要想使用penny("hello"), nickel("world");样式的枚举,就要实现
1) value属性
2) value属性的构造方法
3) getValue()方法
public enum Coin{
penny("hello"), nickel("world"), dime("welcome"), quarter("hello world");
private String value;
public String getValue(){
return value;
}
Coin(String value){
this.value = value;
}
public static void main(String[] args){
Coin coin = Coin.quarter;
System.out.println(coin.getValue());
}
}
public class ShowEnum{
public static void main(String[] args){
enumCompareTo(OpConstant.valueOf(args[0]));
}
public static void enumCompareTo(OpConstant constant){
System.out.println(constant);
for(OpConstant c : OpConstant.values()){
System.out.println(constant.compareTo(c));
}
}
}
运行输入参数:
TURN_RIGHT
运行结果:
TURN_RIGHT
1
0
-1
values()方法
ordinal()方法返回顺序
public class ShowEnum2{
public static void main(String[] args){
for(OpConstant c : OpConstant.values()){
System.out.printf("%d, %s, %n", c.ordinal(), c);
}
}
}
运行结果:
0, TURN_LEFT,
1, TURN_RIGHT,
2, SHOOT,
4. enumSet示例
1. EnumSet的of()方法和complementOf()方法
import java.util.EnumSet;
import java.util.Iterator;
enum FontConstant{
Plain, Bold, Italilc, Hello
}
public class EnumSetDemo{
public static void main(String[] args){
EnumSet<FontConstant> enumSet = EnumSet.of(FontConstant.Plain);
showEnumSet(enumSet);
System.out.println("-------");
showEnumSet(EnumSet.complementOf(enumSet));
}
public static void showEnumSet(EnumSet<FontConstant> enumSet) {
for(Iterator<FontConstant> iter = enumSet.iterator(); iter.hasNext();){
System.out.println(iter.next());
}
}
}
运行结果:
Plain
-------
Bold
Italilc
Hello
2. EnumSet的noneOf()方法
import java.util.EnumSet;
import java.util.Iterator;
public class EnumSetDemo2{
public static void main(String[] args){
EnumSet<FontConstant> enumSet = EnumSet.noneOf(FontConstant.class);
enumSet.add(FontConstant.Bold);
enumSet.add(FontConstant.Italilc);
showEnumSet(enumSet);
}
public static void showEnumSet(EnumSet<FontConstant> enumSet){
for(Iterator<FontConstant> iter = enumSet.iterator(); iter.hasNext();){
System.out.println(iter.next());
}
}
}
运行结果:
Bold
Italilc
3. EnumSet的copyOf()方法
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.Iterator;
import java.util.List;
public class EnumSetDemo3{
public static void main(String[] args){
List<FontConstant> list = new ArrayList<FontConstant>();
list.add(FontConstant.Bold);
list.add(FontConstant.Italilc);
list.add(FontConstant.Plain);
showEnumSet(EnumSet.copyOf(list));
}
public static void showEnumSet(EnumSet<FontConstant> enumSet){
for(Iterator<FontConstant> iter = enumSet.iterator(); iter.hasNext();){
System.out.println(iter.next());
}
}
}
运行结果:
Plain
Bold
Italilc
5. enumMap示例
遍历的顺序和枚举的顺序一致。
import java.util.EnumMap;
import java.util.Map;
public class EnumMapDemo{
public static void main(String[] args){
Map<Action, String> map = new EnumMap<Action, String>(Action.class);
map.put(Action.TURN_RIGHT, "向右转");
map.put(Action.SHOOT, "射击");
map.put(Action.TURN_LEFT, "向左转");
for (Action action : Action.values()){
System.out.println(map.get(action));
}
}
}
enum Action{
TURN_LEFT, TURN_RIGHT, SHOOT;
}
运行结果:
向左转
向右转
射击
6. enum应用
枚举实际应用:控制权限。
public enum AccessRight{
MANAGER, DEPARTMENT, EMPLOYEE;
}
public class AccessControl{
public static boolean checkRight(AccessRight accessRight){
if(accessRight == AccessRight.MANAGER){
return true;
}
else if(accessRight == AccessRight.DEPARTMENT){
return false;
}
return false;
}
public static void main(String[] args){
AccessRight accessRight = AccessRight.valueOf("MANAGER");
System.out.println(checkRight(accessRight));
}
}
运行结果:
true
推荐博客:
https://blog.csdn.net/javazejian/article/details/71333103