Java enum 常见用法

一.定义常量

public enum SystemCode{
	/**
     * OK
     */
    OK(1, "成功"),
    /**
     * AccessTokenError
     */
    AccessTokenError(400, "用户登录令牌失效"),
    /**
     * UNAUTHORIZED
     */
    UNAUTHORIZED(401, "用户未登录"),
    /**
     * UNAUTHORIZED
     */
    AuthError(402, "用户名或密码错误"),
    /**
     * InnerError
     */
    InnerError(500, "系统内部错误"),
    /**
     * ParameterValidError
     */
    ParameterValidError(501, "参数验证错误"),

    /**
     * AccessDenied
     */
    AccessDenied(502,"用户没有权限访问");
}

二.switch

public enum WeekDay { 
     Mon("Monday"), Tue("Tuesday"), Wed("Wednesday"), Thu("Thursday"), Fri( "Friday"), Sat("Saturday"), Sun("Sunday"); 
     private final String day; 
     private WeekDay(String day) { 
            this.day = day; 
     } 
    public static void printDay(int i){ 
       switch(i){ 
           case 1: System.out.println(WeekDay.Mon); break; 
           case 2: System.out.println(WeekDay.Tue);break; 
           case 3: System.out.println(WeekDay.Wed);break; 
            case 4: System.out.println(WeekDay.Thu);break; 
           case 5: System.out.println(WeekDay.Fri);break; 
           case 6: System.out.println(WeekDay.Sat);break; 
            case 7: System.out.println(WeekDay.Sun);break; 
           default:System.out.println("wrong number!"); 
         } 
     } 
    public String getDay() { 
        return day; 
     } 
}

三.添加新方法

public enum Color {
    RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
    // 成员变量
    private String name;
    private int index;

    // 构造方法
    private Color(String name, int index) {
        this.name = name;
        this.index = index;
    }

    // 普通方法
    public static String getName(int index) {
        for (Color c : Color.values()) {
        if (c.getIndex() == index) {
            return c.name;
        }
        }
        return null;
    }

    // get set 方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getIndex() {
        return index;
    }

    public void setIndex(int index) {
        this.index = index;
    }
    }

四.方法覆盖

public class Test {
    public enum Color {
        RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
        // 成员变量
        private String name;
        private int index;

        // 构造方法
        private Color(String name, int index) {
            this.name = name;
            this.index = index;
        }

        // 覆盖方法
        @Override
        public String toString() {
            return this.index + "_" + this.name;
        }
    }

    public static void main(String[] args) {
        System.out.println(Color.RED.toString());
    }
}

五.实现接口

public interface Behaviour {
    void print();

    String getInfo();
    }

    public enum Color implements Behaviour {
    RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
    // 成员变量
    private String name;
    private int index;

    // 构造方法
    private Color(String name, int index) {
        this.name = name;
        this.index = index;
    }

    // 接口方法

    @Override
    public String getInfo() {
        return this.name;
    }

    // 接口方法
    @Override
    public void print() {
        System.out.println(this.index + ":" + this.name);
    }
    }

六.接口组织枚举

public interface Food {
        enum Coffee implements Food {
            BLACK_COFFEE, DECAF_COFFEE, LATTE, CAPPUCCINO
        }

        enum Dessert implements Food {
            FRUIT, CAKE, GELATO
        }
    }

七.枚举集合
1.EnumMap
EnumMap是Map接口的子类,所以本身还是以Map的形式进行操作,即:key -> value。如果要想使用EnumMap,则首先要创建EnumMap的对象,在创建此对象的时候必须指定要操作的枚举类型,所以构造方法如下所示:

public EnumMap(Class<K> keyType)

EnumMap是一个与枚举类一起使用的Map实现,EnumMap中所有key都必须是单个枚举类的枚举值。创建EnumMap时必须显式或隐式指定它对应的枚举类。
EnumMap在内部以数组形式保存,所以这种实现形式非常紧凑、高效。
EnumMap根据key的自然顺序(即枚举值在枚举类中的定义顺序)来维护来维护key-value对的次序。当程序通过keySet()、entrySet()、values()等方法来遍历EnumMap时即可看到这种顺序。
EnumMap不允许使用null作为key值,但允许使用null作为value。如果试图使用null作为key将抛出NullPointerException异常。如果仅仅只是查询是否包含值为null的key、或者仅仅只是使用删除值为null的key,都不会抛出异常

public class EnumMapDemo {

        public static void main(String[] args) {

            Map<Color, String> map = new EnumMap<Color, String>(Color.class);

            map.put(Color.RED, "红色");

            map.put(Color.GREEN, "绿色");

            map.put(Color.BLUE, "蓝色");

            System.out.println("输出全部的枚举:");

            for(Color c : Color.values()){//取得全部的枚举

                System.out.println(c.name() + "-->" + map.get(c));

            }

            System.out.println("输出全部的键值:");

            for(Color c : map.keySet()){//取得全部的key,key是Color类型的

                System.out.println(c.name());

            }

            System.out.println("输出全部的内容:");

            for(String s : map.values()){//取得全部value

                System.out.println(s);

            }

        }

    }

    enum Color{

        RED, GREEN, BLUE;

    }

2.EnumSet
EnumSet是Set接口的子类,所以里面的内容是无法重复的。它有两个继承类:JumboEnumSet和RegularEnumSet。
EnumSet是一个抽象类,在使用EnumSet的时候是不能直接使用关键字new为其进行实例化的,所以在此类中提供了很多的静态方法:

//创建一个包含指定元素类型中所有元素的枚举集。
static <E extends Enum<E>>
EnumSet<E> allOf(Class<E> elementType)

//返回此集的副本
EnumSet<E> clone()

//创建一个枚举集,其元素类型与指定的枚举集相同,最初包含此类型中未包含在指定集中的所有元素
static <E extends Enum<E>>
EnumSet<E> complementOf(EnumSet<E> s)

//创建从指定集合初始化的枚举集
static <E extends Enum<E>>
EnumSet<E> copyOf(Collection<E> c)

//创建一个枚举集,其元素类型与指定的枚举集相同,最初包含相同的元素(如果有)
static <E extends Enum<E>>
EnumSet<E> copyOf(EnumSet<E> s)

//创建具有指定元素类型的空枚举集
static <E extends Enum<E>>
EnumSet<E> noneOf(Class<E> elementType)

//创建最初包含指定元素的枚举集
static <E extends Enum<E>>
EnumSet<E> of(E e)

//创建最初包含指定元素的枚举集
static <E extends Enum<E>>
EnumSet<E> of(E first, E... rest)

//创建最初包含指定元素的枚举集
static <E extends Enum<E>>
EnumSet<E> of(E e1, E e2)

//创建最初包含指定元素的枚举集
static <E extends Enum<E>>
EnumSet<E> of(E e1, E e2, E e3, E e4)

//创建最初包含由两个指定端点定义的范围中的所有元素的枚举集
static <E extends Enum<E>>
EnumSet<E> range(E from, E to) 

八.小结:
1.所有的枚举类型都是Enum类的子类。 它们继承了这个类的许多方法。其中最有用的一个方法是toString(),这个方法能够返回枚举常量名。 toString()方法的逆方法是静态方法valueOf(Class, String).
2.可以创建一个enum类,把它看做一个普通的类。除了它不能继承其他类了.
3.switch()参数可以使用enum了.
4.values()方法是编译器插入到enum定义中的static方法,在Class中有一个getEnumConstants()方法,所以即便Enum接口中没有values()方法,我们仍然可以通过Class对象取得所有的enum实例.
5.无法从enum继承子类,如果需要扩展enum中的元素,在一个接口的内部,创建实现该接口的枚举,以此将元素进行分组.
6.EnumMap的key是enum,value是任何其他Object对象。

***没事做做笔记,看得到细节,才能别人更早发现 ***

枚举类型enum)在Java中用于定义一组常量。以下是一些关于Java枚举类型用法规范: 1. 定义枚举类型:使用关键字"enum"来定义枚举类型,紧跟在enum后面的是枚举类型的名称。 ```java enum Season { SPRING, SUMMER, AUTUMN, WINTER } ``` 2. 枚举常量命名规范:枚举常量通常使用全大写字母命名,多个单词之间用下划线分隔。 ```java enum Color { RED, GREEN, BLUE } ``` 3. 枚举类型的属性和方法:枚举类型可以包含属性和方法。 ```java enum Direction { NORTH("N"), SOUTH("S"), EAST("E"), WEST("W"); private String abbreviation; private Direction(String abbreviation) { this.abbreviation = abbreviation; } public String getAbbreviation() { return abbreviation; } } ``` 4. 枚举常量的使用:枚举类型的常量可以通过枚举类型名称加上常量名称来访问。 ```java Season currentSeason = Season.SPRING; System.out.println(currentSeason); // 输出 SPRING ``` 5. 遍历枚举常量:可以使用枚举类型的values()方法来遍历所有的枚举常量。 ```java for (Season season : Season.values()) { System.out.println(season); } ``` 6. switch语句中的枚举类型:在switch语句中可以使用枚举类型作为判断条件。 ```java Direction direction = Direction.NORTH; switch (direction) { case NORTH: System.out.println("向北"); break; case SOUTH: System.out.println("向南"); break; case EAST: System.out.println("向东"); break; case WEST: System.out.println("向西"); break; default: System.out.println("未知方向"); } ``` 这些是Java枚举类型的一些常见用法规范,希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值