zoukankan      html  css  js  c++  java
  • 【Java】-NO.16.EBook.4.Java.1.005-【疯狂Java讲义第3版 李刚】- 枚举

    1.0.0 Summary

    Tittle:【Java】-NO.16.EBook.4.Java.1.005-【疯狂Java讲义第3版 李刚】- 枚举

    Style:EBook

    Series:Java

    Since:2017-09-18

    End:....

    Total Hours:...

    Degree Of Diffculty:2

    Degree Of Mastery:2

    Practical Level:2

    Desired Goal:2

    Archieve Goal:....

    Gerneral Evaluation:...

    Writer:kingdelee

    Related Links:

    http://www.cnblogs.com/kingdelee/

    package com.lee.test.java.ebook.crazy_java.u_6_oop_2.c_6_9_emnu;
    
    public class MyEmunTest {
    
        // 1. 最简单的枚举类定义方式
        enum Season {
            SPRING, SUMMER, FALL, WINTER;
        }
    
        // 2. 定义枚举时,应把成员变量赋值为 final 以免可以直接通过 .var赋值修改
        // 2.1 枚举应有构造方法指定成员变量,其枚举对象隐式为 public static final 类型 = new ..("");
        // 2.2 枚举类中的枚举值实际上是匿名子类的实例
        enum Gender {
            MALE("男"), FAMALE("女");
            private final String name;
    
            Gender(String name) {
                this.name = name;
            }
        }
    
        interface Show{
            void show();
        }
    
        // 2.3 枚举类实现接口时,每个枚举值都要实现接口
        enum AA implements Show{
            SPRING {
                // 2.3 枚举类中定义的抽象方法,每个枚举值都需要实现
                @Override
                public void mustAction() {
                    System.out.println("mustAction");
                }
    
                // 2.3 枚举类实现接口时,每个枚举值都要实现接口
                @Override
                public void show() {
                    System.out.println("show");
                }
            }, SUMMER {
                // 2.3 枚举类中定义的抽象方法,每个枚举值都需要实现
                @Override
                public void mustAction() {
                    System.out.println("mustAction");
                }
    
                // 2.3 枚举类实现接口时,每个枚举值都要实现接口
                @Override
                public void show() {
                    System.out.println("show");
                }
            };
    
            // 2.3 枚举类中定义的抽象方法,每个枚举值都需要实现
            public abstract void mustAction();
        }
    
        
    
        public static void main(String[] args) {
    
            for (Season season : Season.values()) {
                if (Season.SPRING == season) {
                    System.out.println(season.name());
                }
            }
    
            Gender male = Enum.valueOf(Gender.class, "MALE");
            // 报错
    //        Gender male = Enum.valueOf(Gender.class, "男");
            System.out.println(male == Gender.MALE);
    
            System.out.println(male.name);
    
            AA spring = AA.SPRING;
    
    
    
        }
    
    
    }
    

      

    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * 模拟星期中的表示的天,每个星期天都表示一个对象
     * 1、类中的每一个枚举成员都是该类的一个实例对象
     * 2、构造函数私有化
     * 3、提供操作枚举成员的抽象方法和静态方法
     */
    public abstract class WeekDate {
    	/**
    	 * 星期一
    	 */
    	public static final WeekDate MON = new WeekDate("MON",0) {//匿名子类
    		@Override
    		public WeekDate nextDay() {
    			return TUES;
    		}
    		@Override
    		public WeekDate preDay() {
    			return SUN;
    		}
    		@Override
    		public String toString() {
    			return "WeekDate.MON";
    		}
    	};	
    	
    	/**
    	 * 星期二
    	 */
    	public static final WeekDate TUES = new WeekDate("TUES",1) {
    		@Override
    		public WeekDate nextDay() {
    			return WEDNES;
    		}
    		@Override
    		public WeekDate preDay() {
    			return MON;
    		}
    		@Override
    		public String toString() {
    			return "WeekDate.TUES";
    		}
    	};
    	
    	/**
    	 * 星期三
    	 */
    	public static final WeekDate WEDNES = new WeekDate("WEDNES",2) {
    		@Override
    		public WeekDate nextDay() {
    			return THURS;
    		}
    		@Override
    		public WeekDate preDay() {
    			return TUES;
    		}
    		@Override
    		public String toString() {
    			return "WeekDate.WEDNES";
    		}	
    	};
    	
    	/**
    	 * 星期四
    	 */
    	public static final WeekDate THURS = new WeekDate("THURS",3) {
    		@Override
    		public WeekDate nextDay() {
    			return FRI;
    		}
    		@Override
    		public WeekDate preDay() {
    			return WEDNES;
    		}		
    		@Override
    		public String toString() {
    			return "WeekDate.THURS";
    		}		
    	};
    	
    	/**
    	 * 星期五
    	 */
    	public static final WeekDate FRI = new WeekDate("FRI",4){
    		@Override
    		public WeekDate nextDay() {
    			return SATUR;
    		}
    		@Override
    		public WeekDate preDay() {
    			return THURS;
    		}
    		@Override
    		public String toString() {
    			return "WeekDate.FRI";
    		}
    	};
    	
    	/**
    	 * 星期六
    	 */
    	public static final WeekDate SATUR = new WeekDate("SATUR",5){
    		@Override
    		public WeekDate nextDay() {
    			return SUN;
    		}
    		@Override
    		public WeekDate preDay() {
    			return FRI;
    		}		
    		@Override
    		public String toString() {
    			return "WeekDate.SATUR";
    		}		
    	};
    	
    	/**
    	 * 星期日
    	 */
    	public static final WeekDate SUN = new WeekDate("SUN",6){
    		@Override
    		public WeekDate nextDay() {
    			return MON;
    		}
    		@Override
    		public WeekDate preDay() {
    			return SATUR;
    		}
    		@Override
    		public String toString() {
    			return "WeekDate.SUN";
    		}
    	};
    	
    	private static Map<String, WeekDate> valueMap = new HashMap<String, WeekDate>();
    	
    	/**
    	 * 枚举名称
    	 */
    	private final String name;
    	
    	/**
    	 * 枚举成员的顺序
    	 */
    	private final int ordinal;
    	
    	private WeekDate(String name,int ordinal) {
    		this.name = name;
    		this.ordinal = ordinal;
    	}
    	
    	/**
    	 * 保存枚举成员
    	 */
    	private static WeekDate[] values = {
    		MON,TUES,WEDNES,THURS,FRI,SATUR,SUN
    	};
    	
    	//初始化
    	static {
    		valueMap.put("MON", values[0]);
    		valueMap.put("TUES", values[1]);
    		valueMap.put("WEDNES", values[2]);
    		valueMap.put("THURS", values[3]);
    		valueMap.put("FRI", values[4]);
    		valueMap.put("SATUR", values[5]);
    		valueMap.put("SUN", values[6]);
    	}
    	
    	/**
    	 * 下一天
    	 * @return
    	 */
    	public abstract WeekDate nextDay();
    	
    	/**
    	 * 前一天
    	 * @return
    	 */
    	public abstract WeekDate preDay();
    	
    	/**
    	 * 枚举中的所有成员
    	 * @return
    	 */
    	public static WeekDate[] values() {
    		return values;
    	}
    	
    	/**
    	 * 将一个字符串转换成一个枚举成员对象
    	 * @param name 枚举名称
    	 * @return 枚举对象
    	 */
    	public static WeekDate valueOf(String name) {
    		if (name.equalsIgnoreCase("MON")) {
    			return MON;
    		} else if (name.equalsIgnoreCase("TUES")) {
    			return TUES;
    		} else if (name.equalsIgnoreCase("WEDES")) {
    			return WEDNES;
    		} else if (name.equalsIgnoreCase("THURS")) {
    			return THURS;
    		} else if (name.equalsIgnoreCase("FRI")) {
    			return FRI;
    		} else if (name.equalsIgnoreCase("SATUR")) {
    			return SATUR;
    		} else if (name.equalsIgnoreCase("SUN")) {
    			return SUN;
    		} else {
    			throw new IllegalArgumentException("找不到" + name + "枚举类型!");
    		}
    	}
    	
    	/**
    	 * 优化字符串转枚举对象
    	 * @param name 枚举名称
    	 * @return 枚举对象
    	 */
    	public static WeekDate valueOf_2(String name) {
    		WeekDate value = valueMap.get(name.toUpperCase());
    		if (value == null) {
    			throw new IllegalArgumentException("找不到" + name + "枚举类型!");
    		}
    		return value;
    	}
    	public String getName() {
    		return name;
    	}
    	public int getOrdinal() {
    		return ordinal;
    	}
    }
    

      

  • 相关阅读:
    Oracle存储过程
    eclipse使用小技巧
    A.N.T的使用
    Java中JDBC连接数据库(MySQL)
    SQL常用语句例子
    c/s&&b/s区别浅析
    ngRoute+ngAnimate与JQM中的页面跳转的区别
    jQueryMobile与AngularJS的区别
    jQueryMobile--栅格布局
    jQueryMobile--基础
  • 原文地址:https://www.cnblogs.com/kingdelee/p/7544351.html
Copyright © 2011-2022 走看看