Лучший способ вызвать несколько исключений из блока catch - PullRequest
0 голосов
/ 24 октября 2019

Я пишу некоторую обработку исключений для одного из проектов, где мне пришлось генерировать исключения в зависимости от кода ошибки внутри блока catch. Я сделал это следующим образом:

public BankStatistics fetchBankStatistics(final Customer id) {
    final BankStatistics bs= this.bankStatService.fetchStatDetails(id);
    return bs;
} catch (final StaticticsProcessingexception ex) {
    if (ex.getErrorCode().equals("STAT-102")) {
      // log the error
      throw new MyNewCustomException(ERROR.INVALID_CUST_ID)
    }
    if (ex.getErrorCode().equals("STAT-103")) {
      // log the error
      throw new MyNewCustomException(ERROR.CUST_DOES_NOT_EXIST)
    }
    if (ex.getErrorCode().equals("STAT-104")) {
      // log the error
      throw new MyNewCustomException(ERROR.CUST_NOT_AUTHENTICATED)
    }
    return null;
}

Приведенный выше код компилируется, но мне почему-то не понравилась идея возврата нуля из блока catch. Можете ли вы дать несколько советов, если приведенный выше код - лучший способ справиться с этим сценарием или есть какой-либо другой способ?

Ответы [ 3 ]

1 голос
/ 24 октября 2019

Вы можете выбросить YourNewCustomException с пустым сообщением.

throw new MyNewCustomException();
1 голос
/ 24 октября 2019

Я предоставляю ниже мое мнение в этом случае. Я хотел бы предложить карту карты ошибок в качестве ключа и другие детали в качестве значений. Например, вы можете поддерживать это так.

Map<String,String> errMap = new HashMap<>();
errMap.put("STAT-102",ERROR.INVALID_CUST_ID);
errMap.put("STAT-103",ERROR.CUST_DOES_NOT_EXIST);
errMap.put("STAT-104",ERROR.CUST_NOT_AUTHENTICATED);

Преимущество здесь в том, что нет необходимости записывать несколько, если в блоке исключений вы можете просто написать так:

catch (final StaticticsProcessingexception ex) {
      throw new MyNewCustomException(errMap.get(ex.getErrorCode()))
}

Как предположил Кейман Сэр, вы также можете выбросить IllegalArgumentException, помимо того, что, исходя из ваших бизнес-требований, вы также можете создать свой собственный класс исключений, и вы можете выбросить его, обработав ошибку.

1 голос
/ 24 октября 2019

Почему бы вам просто не бросить экс в этом случае?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...