java中枚举enum
程序员文章站
2022-06-17 09:07:13
...
1. enum用于常量
- 在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
本文转自:http://andrew7676.iteye.com/blog/2432209