У меня есть интересное требование, мы имеем больших перечисления видаАвтоматически присваивать значения в Java перечислении
public enum BpcCmsError {
ERROR_TYPE_1("Error message 1"),
ERROR_TYPE_2("Error message 2"),
ERROR_TYPE_3("Error message 3");
private int errorCode;
private final String errorMessage;
public static final int ERRORCODE_BASE = 100;
мне нужно назначить некоторые уникальные коды ошибок, начиная от числа и подсчет вверх, так что у меня есть конструктор:
private BpcCmsError(String message) {
this.errorMessage = message;
}
и статический блок
static {
int code = ERRORCODE_BASE;
for (BpcCmsError error : EnumSet.allOf(BpcCmsError.class)) {
error.errorCode = ++code;
}
}
, который работает просто отлично.
Тем не менее, мне нужна некоторая дополнительная гибкость при назначении этих кодов ошибок, в идеале, как это:
ERROR_TYPE_1("Error message 1"),
ERROR_TYPE_2("Error message 2"),
ERROR_TYPE_3(200,"Error message for code");
с намерением, что 2-арг конструктор будет вызывать последующие коды ошибок, чтобы начать от значения, что первым параметр. В моем случае коды ошибок будут 100, 101, 200, 201 и т. Д. Конечно, мне нужно проверить, что этот прыжок должен быть разрешен, например, мы, возможно, уже насчитывали прошлое 200. Любые советы о том, как добиться этого, используя enums в Java?
Создать статический INT 'nextCode' и либо принять следующий код из него и увеличить его или использовать код из конструктора (после проверки достоверности) и установите 'nextCode' в заданный код + 1 –
Вы не можете ссылаться на статические поля из конструкторов enum:' error: незаконная ссылка на статическое поле из инициализатора'. – Thomas
@Thomas Я вижу, спасибо, но есть взломать: создайте статический класс внутри enum и поместите статический int внутри этого класса. –