枚举类
package com.yisces.y_enum;
import java.util.EnumMap;
import java.util.EnumSet;
/**
* 定义枚举
* @author yisces
*
*/
public enum EnumConstant {
//此时每一个枚举就想当与一个类,他们拥有共同的父类,因此要实现父类的getValue方法
ME(1){
@Override
public String getValue() {
return "我";
}
}
,YOU(2){
@Override
public String getValue() {
return "你";
}
}
,HE(3){
@Override
public String getValue() {
return "他";
}
};
private Number num;
/**
* 待构造参数的枚举 --构造函数只能为私有,可以不写,默认为私有
* @param num
*/
private EnumConstant(int num){
this.num = num;
}
public abstract String getValue(); //枚举抽象方法,具体实现由枚举内部类实现
/**
* 重写toString方法,这是调用枚举时返回的是对应的num
*/
public String toString(){
return num.toString();
}
/**
* 枚举类里可以写静态方法 --用switch判断
*
* @author yisces
* @param constant
* @return
*/
public static EnumConstant getValueBySwitch(EnumConstant constant){
EnumConstant enumConstant;
switch(constant){
case ME:
System.out.println("你选择了我");
enumConstant = EnumConstant.ME;
break;
case YOU:
System.out.println("你选择了自己");
enumConstant = EnumConstant.YOU;
break;
case HE:
System.out.println("你选择了他");
enumConstant = EnumConstant.HE;
break;
default:
System.out.println("你选择错误");
enumConstant = null;
break;
}
return enumConstant;
}
/**
* 枚举类里可以写静态方法 --用if判断
*
* @author yisces
* @param constant
* @return
*/
public static EnumConstant getValueByIf(EnumConstant constant){
EnumConstant enumConstant;
if(ME == constant){
System.out.println("你选择了我");
enumConstant = EnumConstant.ME;
}else if(YOU == constant){
System.out.println("你选择了你自己");
enumConstant = EnumConstant.YOU;
}else if(HE == constant){
System.out.println("你选择了他");
enumConstant = EnumConstant.HE;
}else {
enumConstant = null;
}
return enumConstant;
}
/**
* 演示枚举类型的遍历
*
* @author yisces
*/
public static void getEnumLoop(){
EnumConstant[] constantArr = EnumConstant.values();
for(EnumConstant constant : constantArr){
System.out.println("当前枚举的名字:" + constant.name());
System.out.println("当期枚举所在类中的位置:" + constant.ordinal());
System.out.println("当前枚举:" + constant);
}
}
/**
* 演示EnumMap的使用,EnumMap跟HashMap的使用差不多,只不过key为枚举类型
*
* @author yisces
*/
public static void getEnumMap(){
//定义EnumMap对象,EnumMap对象的构造函数需要参数传入,默认为key的类的类型
EnumMap<EnumConstant, String> currEnumMap = new EnumMap<EnumConstant, String>(EnumConstant.class);
currEnumMap.put(EnumConstant.ME, "我");
currEnumMap.put(EnumConstant.YOU, "你");
currEnumMap.put(EnumConstant.HE, "他");
/*
* 遍历Map对象
*/
for(EnumConstant constant : EnumConstant.values()){
System.out.println("[key = "+constant.name()+", value = "+currEnumMap.get(constant)+"]");
}
}
/**
* 演示EnumSet使用方法,EnumSet是一个抽象类,获取一个类型的枚举类型内容
* 可以使用allOf方法,allOf创建一个包含所有在指定元素类型的元素的枚举set
* public static <E extends Enum<E>> EnumSet<E> allOf(Class<E> elementType)
* @author yisces
*/
public static void getEnumSet(){
EnumSet<EnumConstant> currEnumSet = EnumSet.allOf(EnumConstant.class);
for(EnumConstant constant : currEnumSet){
System.out.println("当前EnumSet中数据为:" + constant + ",在枚举类中的位置为:" + constant.ordinal());
}
}
private static EnumMap<EnumConstant, String> currEnumMap = new EnumMap<EnumConstant, String>(EnumConstant.class);
static {
currEnumMap.put(EnumConstant.ME, "我");
currEnumMap.put(EnumConstant.YOU, "你");
currEnumMap.put(EnumConstant.HE, "他");
}
/**
* 综合应用--获取枚举对应的名称
* 上面那种给每个变量别名的方法,自我感觉不好,太分散了,我们可以通过EnumMap的方式加判断的方式来返回对应的别名
*
* @author yisces
* @return
*/
public static String getValueByMultiple(EnumConstant enumConstant){
String byname = "";
for(EnumConstant constant : EnumConstant.values()){
if(constant == enumConstant){
System.out.println("[key = "+constant.name()+", value = "+currEnumMap.get(constant)+"]");
byname = currEnumMap.get(constant);
break;
}
}
return byname;
}
}
测试类
package com.yisces.y_enum;
public class EnumTest {
public static void main(String[] args) {
System.out.println(EnumConstant.ME); //重写 toSting方法后 输出结果为1
System.out.println("<------------分割线-------------->");
System.out.println(EnumConstant.ME.getValue()); //调用getValue返回我们定义的当前元素的别名
System.out.println("<------------分割线-------------->");
/*
* 两个判断
*/
System.out.println(EnumConstant.getValueByIf(EnumConstant.ME));
System.out.println("<------------分割线-------------->");
System.out.println(EnumConstant.getValueBySwitch(EnumConstant.YOU));
System.out.println("<------------分割线-------------->");
/*
* 三个遍历
*/
System.out.println("普通遍历:");
EnumConstant.getEnumLoop(); //普通遍历
System.out.println("<------------分割线-------------->");
System.out.println("EnumMap遍历:");
EnumConstant.getEnumMap(); //EnumMap遍历
System.out.println("<------------分割线-------------->");
System.out.println("EnumSet遍历:");
EnumConstant.getEnumSet(); //EnumSet遍历
/*
* 综合应用
*/
System.out.println("<------------分割线-------------->");
System.out.println(EnumConstant.getValueByMultiple(EnumConstant.ME));
}
}
测试结果截图