Ошибка SonarQube - выдает выделенное исключение вместо общего исключения для класса Abstract - PullRequest
0 голосов
/ 15 марта 2019

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

public abstract class Message {

    public abstract byte[] getPayload() throws Exception;

    public abstract Optional<String> getStringMessage() throws Exception;

}

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

1 Ответ

1 голос
/ 15 марта 2019

Не изменяйте бросок Exception, прежде чем проверять, какие Exception с выбрасываются расширяющими типами Message. Вы можете сломать существующий код (см. Ниже).

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

Пользовательский Exception может содержать дополнительные данные в качестве полей класса. Эти дополнительные данные могут быть установлены в точке выброса (обычно там, где эти данные доступны только) и проверены на верхних уровнях при обработке.

Поскольку этот класс действует как своего рода interface (рассмотрите возможность его рефакторинга в interface, действительно), он будет тем, который выставлен / используется повсеместно, и, следовательно, он должен быть максимально четким.

Пара возможных имен может быть

MessageException
PayloadRecoveryException

Применение более конкретного Exception, имеющего расширяемые типы, которые уже предоставляют конкретные, или даже просто базовое Exception, приведет к ошибкам компиляции

Начальная точка

enter image description here

Теперь обновите Exception до «пользовательского». Error !

enter image description here

Так что будьте осторожны, иначе люди будут жаловаться.

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