Java中枚举类使用

枚举类型可以取代以往常量的定义方式,即将常量封装在类或接口中。枚举类型提供了安全检查功能,但本质上还是以类的形式存在。

由于它继承于java.lang.Enum类,所以当定义一个枚举类型时,每一个枚举类型成员都可以看作是枚举类型的一个实例,这些枚举类型成员默认都被final、public、static所修饰,当使用枚举类型成员时直接使用枚举类型名称调用枚举类型成员即可。

因为枚举类型对象继承与java.lang.Enum类,所以该类中一些操作枚举类型的方法都可以应用到枚举型中。

方法名称

含义 使用方式

values()

将类中所有枚举常量成员以数组的形式返回 直接使用:values()

ordinal()

得到每个枚举常量的索引,就像数组索引一样,从0开始 枚举常量.ordinal()

valueOf()

方法返回指定字符串值的枚举常量。

该方法为静态方法,调用者为枚举常量,不是枚举值;

形参只要一个String类型的值即可,并且该String值为枚举值对应的名称,即toString()方法返回的值(比如枚举常量为OK,对应的名称就是"OK")。

枚举常量.valueOf("OK")

name()

toString()

获取枚举常量,二者几乎等同,都是输出枚举常量的字符串形式

枚举常量.name()

枚举常量.toString()

 

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;  
    }  
}  

 

import java.util.ArrayList;
import java.util.List;

import com.alibaba.fastjson.JSONObject;

public enum ToolStatusCodeExt {
  // 常量数据
  SUCCESS    (1000, "处理成功", "通用"),
  ERROR    (1001, "处理失败", "通用"),
  LOGIN_ERROR  (1002, "登录失败", "登录操作"),
  REG_SUCCESS  (1003, "注册成功", "注册操作"),
  REG_ERROR  (1004, "注册失败", "注册操作");

  // 常量数据对应的参数信息
  // 编码
  private final int code;
  // 提示信息
  private final String msg;
  // 操作类型
  private final String type;

  // 带参的构造函数,参数类型要与常量数据中的数据类型顺序一致
  ToolStatusCodeExt(int code, String msg, String type) {
    this.code = code;
    this.msg = msg;
    this.type = type;
  }
  
  /**
   * 
功能:将当前常量数据转化为JSON信息
* * @return */ public String toJson() { JSONObject jsonObject = new JSONObject(); jsonObject.put("code", this.code); jsonObject.put("msg", this.msg); jsonObject.put("type", this.type); return jsonObject.toJSONString(); } /** * 根据code获取msg */ public static String getValue(int code) { for (ToolStatusCodeExt toolStatusCodeExt : values()) { if (code == toolStatusCodeExt.code) { return toolStatusCodeExt.msg; } } return ""; } /** *
功能:获取当前枚举类常量信息
* */ private static List getArgs() { List list = new ArrayList<>(); for (ToolStatusCodeExt toolStatusCodeExt : values()) { list.add(toolStatusCodeExt.name()); } return list; } public int getCode() { return code; } public String getMsg() { return msg; } public String getType() { return type; } public static void main(String[] args) throws Exception { System.out.println("--------将当前常量数据转化为JSON信息--------"); System.out.println(ToolStatusCodeExt.SUCCESS.toJson()); System.out.println(); System.out.println("--------获取指定常量数据信息--------"); System.out.println(ToolStatusCodeExt.REG_SUCCESS.getCode()); System.out.println(ToolStatusCodeExt.REG_SUCCESS.getMsg()); System.out.println(ToolStatusCodeExt.REG_SUCCESS.getType()); System.out.println(); System.out.println("---------直接指定常量名称对应的数据信息-------"); System.out.println(ToolStatusCodeExt.valueOf("ERROR").getCode()); System.out.println(ToolStatusCodeExt.valueOf("ERROR").getMsg()); System.out.println(ToolStatusCodeExt.valueOf("ERROR").getType()); System.out.println(ToolStatusCodeExt.valueOf("ERROR").ordinal()); System.out.println(); System.out.println("---------获取当前枚举类常量信息-------"); List constantList = getArgs(); for (String constantName : constantList) { System.out.println(constantName); } System.out.println(); System.out.println("---------根据常量数据的code获取对应的msg信息-------"); System.out.println(getValue(1003)); } }

你可能感兴趣的:(java,开发语言)