Java:枚举实例名称作为参数,是否可能?

时间:2013-06-14 21:24:02

标签: java enums arguments

帮助我们。我有以下内容:

public class ParserException extends Exception {
    ParserException(ErrorMessage errorCode) {
        super(errorCode.getMessageText());
    }

    public enum ErrorMessage {
        DIVISION_BY_ZERO("Деление на ноль");

        private String messageText;

        ErrorMessage(String text) {
            this.messageText = text;
        }

        public String getMessageText() {
            return messageText;
        }
    }
}

我想以这样的方式传递我的枚举实例名称,而不需要使用引号:

throw new ParserException(DIVISION_BY_ZERO);

我不喜欢在我抛出提到的异常的类中包含一些东西。 (已经建议使用import static blah.blah.ParserException.ErrorMessage.*;

有没有其他温和的解决方案来处理这类事情?你怀疑我很乐意通过在我的ParserException构造函数中添加几行来解决它。

有什么好主意吗? THX。

2 个答案:

答案 0 :(得分:2)

嗯,如果你添加你的导入就可以了:

import static complete.package.of.ErrorMessage.*;

这意味着在代码中,ErrorMessage.FOOFOO将是相同的。

注意:Java 5+,但今天没有人使用Java 4-,对吧? :P

注意2:您也可以在枚举中覆盖.toString(),只需返回messageText

答案 1 :(得分:0)

由于使用内部枚举实例需要笨拙的语法,我会让你的枚举成为顶级类(在自己的java文件中) 如果你这样做,使用它会变得干净简单。

虽然我更喜欢避免阶级臃肿,但在这种情况下我允许它,因为一切都比较简单,这很好。

谁知道......总有一天你可能想在其他地方使用这个课程。