枚举实例中的异常处理

时间:2014-06-12 13:00:03

标签: java enums

如何在Java中处理Enum实例中的异常?我有一个枚举类如下:

public enum TagEnum {

    EDIT_ACCESS("feature.edit", GlobalAccess.getEditStatus());

    private String key;
    private Boolean featureStatus;

    private TagEnum(String key, Boolean status) {
        this.key=key;
        this.featureStatus=status;
    }

}

getEditStatus()类的上述场景GlobalAccess方法抛出异常:

public static Boolean getEditStatus() throws Exception {
    ...
}

上面TagEnum枚举产生了编译错误,因为枚举实例无法处理GlobalAccess.getEditStatus()方法。请指导我如何传递抛出异常的java方法,作为Enum实例中的参数。

2 个答案:

答案 0 :(得分:1)

你不能在类成员声明中处理异常,并且在这种意义上声明enum与声明一个类很相似。

您必须将GlobalAccess.getEditStatus()调用移动到块,构造函数或方法中,以处理抛出的任何异常。例如,您可以将其移动到构造函数中,如此;

private TagEnum(String key) {
    this.key=key;
    try{
        this.featureStatus = GlobalAccess.getEditStatus();
    } catch(Exception e) { 
        // Handle the exception here. 
    }
}

或者Initialization Blocks或多或少地创建了这个问题。允许您在类(或枚举)成员声明期间处理逻辑,错误和异常。

答案 1 :(得分:0)

您可以实现一个能够处理此异常的专用方法,例如:

public enum TagEnum {

    EDIT_ACCESS("feature.edit") {
        @Override
        protected Boolean initFeatureStatus() {
            try {
                return GlobalAccess.getEditStatus();
            } catch (Exception e) {
                // handle it there
                return null;
            }
        }
    };

    private String key;
    private Boolean featureStatus;

    private TagEnum(String key) {
        this.key = key;
        this.featureStatus = initFeatureStatus();
    }

    protected abstract Boolean initFeatureStatus();

}