一.定义常量
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对象。
***没事做做笔记,看得到细节,才能别人更早发现 ***