java枚举类enum的使用

版权声明:原创文章,转载请注明出处。 https://blog.csdn.net/aitcax/article/details/53501472

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

猜你喜欢

转载自blog.csdn.net/aitcax/article/details/53501472