回顾Java基础——枚举详解

原始的接口定义常量

public interface IConstants {
    String MON = "Mon";
    String TUE = "Tue";
    String WED = "Wed";
    String THU = "Thu";
    String FRI = "Fri";
    String SAT = "Sat";
    String SUN = "Sun";
}

语法(定义)

创建枚举类型要使用 enum 关键字,隐含了所创建的类型都是 java.lang.Enum 类的子类
(java.lang.Enum 是一个抽象类)。枚举类型符合通用模式 Class Enum<E extends Enum<E>>,
而 E 表示枚举类型的名称。
枚举类型的每一个值都将映射到 protected Enum(String name, int ordinal) 构造函数中,
在这里,每个值的名称都被转换成一个字符串,并且序数设置表示了此设置被创建的顺序。

package com.hmw.test;
/**
 * 枚举测试类
 */
public enum EnumTest {
    MON, TUE, WED, THU, FRI, SAT, SUN;
}

这段代码实际上调用了7次 Enum(String name, int ordinal):

	new Enum<EnumTest>("MON",0);
	new Enum<EnumTest>("TUE",1);
	new Enum<EnumTest>("WED",2);
... ...

遍历、switch 等常用操作
对enum进行遍历和switch的操作示例代码:

public class Test {
    public static void main(String[] args) {
        for (EnumTest e : EnumTest.values()) {
            System.out.println(e.toString());
        }
         
        System.out.println("----------------我是分隔线------------------");
         
        EnumTest test = EnumTest.TUE;
        switch (test) {
        case MON:
            System.out.println("今天是星期一");
            break;
        case TUE:
            System.out.println("今天是星期二");
            break;
        // ... ...
        default:
            System.out.println(test);
            break;
        }
    }
}
输出结果:

MON
TUE
WED
THU
FRI
SAT
SUN

----------------分隔线------------------

enum 对象的常用方法介绍

int compareTo(E o) 
          比较此枚举与指定对象的顺序。

Class<E> getDeclaringClass() 
          返回与此枚举常量的枚举类型相对应的 Class 对象。

String name() 
          返回此枚举常量的名称,在其枚举声明中对其进行声明。

int ordinal() 
          返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。

String toString()

           返回枚举常量的名称,它包含在声明中。

static <T extends Enum<T>> T valueOf(Class<T> enumType, String name) 
          返回带指定名称的指定枚举类型的枚举常量。

总结

可以把 enum 看成是一个普通的 class,它们都可以定义一些属性和方法,
不同之处是:enum 不能使用 extends 关键字继承其他类,
因为 enum 已经继承了 java.lang.Enum(java是单一继承)。

一、枚举实现的原理

通过关键字enum创建枚举类型在编译后事实上也是一个类类型
该类继承自java.lang.Enum类

例子:

enum Day {
    MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

这个编译后,这些枚举值实际上会编译成public static final 类型的变量,并且通过
static块初始化值。

static{
   MONDAY = new Day("MONDAY", 0);
}

二、常用方法

1、name():返回此枚举常量的名称
2、toString():返回此枚举常量的名称
3、equals(Object other):当指定对象等于此枚举常量时,返回 true。
4、values():返回枚举值数组
5、valueOf():根据常量名词返回枚举值
6、可以重写有参构造方法,指定多个枚举值的常量属性

SUCCESS(0, "success"),
ResultStatus(Integer code, String msg){
    this.code = code;
    this.msg = msg;
}

7、如果是默认的无参构造器,()里面的第一个参数就是枚举常量值

三、用法:

(1):定义抽象方法(枚举策略模式): 可在公共方法中代替if else代码

securityGroupsList() {
    @Override
    public void apply(JSONObject json) {
    }
},

public abstract void apply(JSONObject json);

EnumOpenStackJson.valueOf(fsOpenStackMethod).apply((JSONObject) json);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值