java枚举类enum的使用

使用有构造方法的枚举类型的时候,通常可能会用到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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值