Java – необходимо инициализировать переменную перед вызовом конструктора super()JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Java – необходимо инициализировать переменную перед вызовом конструктора super()

Сообщение Anonymous »


Примечание: часть кода будет на испанском языке.

Привет. Я создал хорошую модель исключений для своего приложения Spring Boot, так что каждое вызываемое мной персонализированное исключение создает персонализированный ответ (в данном случае это класс с именем ErrorModel), поэтому я могу перехватить это исключение в @RestControllerAdvice с @ExceptionHandler и просто верните errorModel, созданный этим конкретным исключением. Особенностью каждой errorModel, созданной в персонализированных исключениях, являются код и описание.

@Slf4j @RestControllerAdvice общественный класс GlobalExceptionHandler { @ExceptionHandler(ClienteSinMorasException.class) @ResponseStatus(HttpStatus.NOT_FOUND) @ResponseBody public ErrorModel manejoDeClienteSinMoras (ClienteSinMorasException ex) { вернуть ex.getErrorModel(); } } @Getter @AllArgsConstructor общественный класс ErrorModel { частная финальная строка codigo; частное окончательное описание строки; частные финальные ошибки ArrayList; //не принимайте это во внимание } Итак, поскольку каждое исключение работает одинаково, и единственная разница — это код (codigo) и описание (descipcion), я создал это, и все работало нормально:

публичный абстрактный класс IErrorException расширяет RuntimeException { @Getter частная окончательная ErrorModel errorModel; публичная абстрактная строка getCodigo(); публичная абстрактная строка getDescripcion(); общественное IErrorException () { супер(); this.errorModel = новая ErrorModel(this.getCodigo(), this.getDescripcion(), null); } public IErrorException(ArrayList ошибки) { супер(); this.errorModel = новая ErrorModel(this.getCodigo(), this.getDescripcion(), errores); } public IErrorException (String errorKey, String errorValue) { супер(); ArrayList errores = new ArrayList(); errores.add(new HashMap(Map.of(errorKey, errorValue))); this.errorModel = новая ErrorModel(this.getCodigo(), this.getDescripcion(), errores); } } // Одно из исключений @Getter общественный класс ClienteSinMorasException расширяет IErrorException { частная финальная строка codigo = «код»; частная окончательная строка описание = "дескрипция"; общественный ClienteSinMorasException () { супер(); } public ClienteSinMorasException (ошибки ArrayList) { супер(ошибки); } public ClienteSinMorasException (String errorKey, String errorValue) { супер (errorKey, errorValue); } } Это было идеально (за исключением этих суперов, но неважно), но недавно они попросили меня изменить это, чтобы код и описание считывались из .yml. свойства, чтобы значения можно было изменять во время выполнения без необходимости перезапуска приложения. Это простое изменение сломало все.

Я понял, что единственная причина, по которой это сработало, заключалась в том, что поля final типов явных примитивов «вроде как уже существуют», когда в абстрактном классе я делаю this.getCodigo() (в этом примере возвращается «код»). Если он не final и не относится к типу явный примитив, это не работает, оно загружает все ПОСЛЕ выполнения конструктора, поэтому в конечном итоге я создаю < code>new ErrorModel(null, null, null). Кроме того, super() должен быть первым в конструкторе, поэтому я не могу правильно инициализировать переменные.

// Одно из исключений @Getter общественный класс ClienteSinMorasException расширяет IErrorException { частная финальная строка codigo = Yml.get("cod"); частное окончательное описание строки = Yml.get("desc"); общественный ClienteSinMorasException () { супер(); } public ClienteSinMorasException (ошибки ArrayList) { супер(ошибки); } public ClienteSinMorasException (String errorKey, String errorValue) { супер (errorKey, errorValue); } } Это не работает, и, честно говоря, я не знаю, что делать.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»