APIJSON 博客13 Operation 第十三篇

2021SC@SDUSC

public enum Operation {}是枚举类型

枚举常用方法如下

一,常量定义
public enum WeekDay {
    SUN, MON, TUE, WED, THT, FRI, SAT
}
二,swich
public enum WeekDay {
    SUN, MON, TUE, WED, THT, FRI, SAT
}
 
public class SelectDay{
    WeekDay weekday = WeekDay.SUN;
    public void select(){
        switch(weekday){
            case SUN:
                weekday = WeekDay.SUN;
                break;
            ...
        }
    }
}
三,向枚举添加新方法
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 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 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 
    } 
}
七,枚举集合
public class Test {
    public static void main(String[] args) {
        EnumSet<WeekDay> week = EnumSet.noneOf(WeekDay.class);
        week.add(WeekDay.MON);
        System.out.println("EnumSet中的元素:" + week);
        week.remove(WeekDay.MON);
        System.out.println("EnumSet中的元素:" + week);
        week.addAll(EnumSet.complementOf(week));
        System.out.println("EnumSet中的元素:" + week);
        week.removeAll(EnumSet.range(WeekDay.FRI, WeekDay.SAT));
        System.out.println("EnumSet中的元素:" + week);
    }
 
 

这个方法的代码如下

	/**
	 * 必须传的字段,结构是
	 * "key0,key1,key2..."
	 */
	MUST,

	/**
	 * 不允许传的字段,结构是
	 * "key0,key1,key2..."
	 */
	REFUSE,
	
	/**TODO 是否应该把数组类型写成 BOOLEANS, NUMBERS 等复数单词,以便抽取 enum ?扩展用 VERIFY 或 INSERT/UPDATE 远程函数等
	 * 验证是否符合预设的类型:
	 * BOOLEAN, NUMBER, DECIMAL, STRING, URL, DATE, TIME, DATETIME, OBJECT, ARRAY 
	 * 或它们的数组
	 * BOOLEAN[], NUMBER[], DECIMAL[], STRING[], URL[], DATE[], TIME[], DATETIME[], OBJECT[], ARRAY[]
	 * 结构是
	 * {
	 *   key0: value0,
	 *   key1: value1,
	 *   key2: value2
	 *   ...
	 * }
	 * 例如
	 * {
	 *   "id": "NUMBER", //id 类型必须为 NUMBER
	 *   "pictureList": "URL[]", //pictureList 类型必须为 URL[]
	 * }
	 * @see {@link AbstractVerifier#verifyType(String, String, Object, boolean)}
	 */
	TYPE,
	
	/**
	 * 验证是否符合预设的条件,结构是
	 * {
	 *   key0: value0,
	 *   key1: value1,
	 *   key2: value2
	 *   ...
	 * }
	 * 例如
	 * {
	 *   "phone~": "PHONE",  //phone 必须满足 PHONE 的格式,配置见 {@link AbstractVerifier#COMPILE_MAP}
	 *   "status{}": [1,2,3],  //status 必须在给出的范围内
	 *   "balance&{}":">0,<=10000"  //必须满足 balance>0 & balance<=10000
	 * }
	 */
	VERIFY,
	
	/**TODO 格式改为 id;version,tag 兼容多个字段联合主键。 ["id", "version,tag"] 也行
	 * 验证是否存在,结构是
	 * "key0,key1,key2..."
	 */
	EXIST,
	
	/**TODO 格式改为 id;version,tag 兼容多个字段联合主键。 ["id", "version,tag"] 也行
	 * 验证是否不存在,除了本身的记录,结构是
	 * "key0,key1,key2..."
	 */
	UNIQUE,
	
	
	/**
	 * 添加,当要被添加的对象不存在时,结构是
	 * {
	 *   key0: value0,
	 *   key1: value1,
	 *   key2: value2
	 *   ...
	 * }
	 */
	INSERT,
	
	/**
	 * 强行放入,不存在时就添加,存在时就修改,结构是
	 * {
	 *   key0: value0,
	 *   key1: value1,
	 *   key2: value2
	 *   ...
	 * }
	 */
	UPDATE,
	
	/**
	 * 替换,当要被替换的对象存在时,结构是
	 * {
	 *   key0: value0,
	 *   key1: value1,
	 *   key2: value2
	 *   ...
	 * }
	 */
	REPLACE,
	
	/**
	 * 移除,当要被移除的对象存在时,结构是
	 * "key0,key1,key2..."
	 */
	REMOVE;
	

定义了一些常量和使用方法以及注释,供其他类使用

上一篇:避免大量ifelse(枚举、工厂模式、策略模式)


下一篇:swift实现多线程的三种方式