java枚举类enum的使用

来源:互联网 发布:北京理工大学 网络教育 编辑:程序博客网 时间:2024/05/25 08:12

使用有构造方法的枚举类型的时候,通常可能会用到valueOf()方法,根据枚举类型,获取枚举类型的值,比如
String str = MonitorTarget.valueOf(GWCALLCOUNT);,然后得到str的值是"网关:访问量"
valueOf()这个方法是枚举类型隐含自带的,通常也可以Override覆盖 toString方法来完成通过枚举类型获取值的功能。

然而有的情况下还需要从String转化到Enum对象,这个时候可以使用下面的两种fromString()方式。

public enum MonitorTarget {    GWCALLCOUNT("网关:访问量"),    ASCALLCOUNT("接入机:访问量"),    MSCALLCOUNT("微服务:访问量"),    DBCALLCOUNT("数据库:访问量");    private String targetName;    // 枚举类的构造函数必须要为private,因为不能在枚举类之外在调用构造函数来初始化枚举,枚举的内容在运行时就已经初始化好了,枚举类的内容相当于枚举类的一个个实体    private MonitorTarget(String targetName) {        this.targetName = targetName;    }    public String getTargetName() {        return this.targetName;    }    // 方法一:使用静态map对象,在enum实例化的时候,将各个对象放进map中,然后在需要的时候从map中来取    private static final Map<String, MonitorTarget> stringToEnum = new HashMap<String, MonitorTarget>();    static {        // Initialize map from constant name to enum constant        for(MonitorTarget mt : values()) {            stringToEnum.put(mt.targetName, mt);            // 也可以写成            //stringToEnum.put(mt.toString(), mt);            //stringToEnum.put(mt.getTargetName(), mt);        }    }    // Returns Blah for string, or null if string is invalid    public static MonitorTarget fromString2(String symbol) {        return stringToEnum.get(symbol);    }    // 方法二:在需要的时候循环枚举对象,根据值来匹配,返回枚举对象    public static MonitorTarget fromString(String text) {        if (text != null) {          for (MonitorTarget b : MonitorTarget.values()) {            if (text.equalsIgnoreCase(b.targetName)) {              return b;            }          }        }        return null;    }    @Override    public String toString() {        return this.targetName;    }}
0 0
原创粉丝点击