У меня моральная дилемма. В моем приложении есть несколько объектов значений, которые неизменны и чрезвычайно просты. Я' ve сгенерировал равенства и хэш-код с помощью IDE (intellij в моем случае), но это привело к падению покрытия кода, плюс отчеты теперь показывают, что эти объекты значений очень сложны (с использованием метрики цикломатической сложности ) хотя на самом деле они очень просты.
В качестве примера, следующее равенство находится в объекте значения, который имеет 3 неизменяемых атрибута. Сложность кода составляет 14 (javaNCSS) и 26 ветвей выполнения (Cobertura). Я должен также добавить, что я не выполняю сборку, если какой-либо метод имеет сложность больше 10.
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
TranscriptTaskDetails that = (TranscriptTaskDetails) o;
if (inputFile != null ? !inputFile.equals(that.inputFile) : that.inputFile != null) {
return false;
}
if (language != that.language) {
return false;
}
if (outputFile != null ? !outputFile.equals(that.outputFile) : that.outputFile != null) {
return false;
}
return true;
}
Мне интересно, что другие разработчики используют, чтобы обойти это, поскольку я уделяю довольно много внимания отчетам о сложности, как в по моему опыту, показатель высокой сложности связан с большим количеством ошибок, поэтому эти автоматически сгенерированные равенства и хэш-коды загрязняют отчеты.
I ' Я думаю об использовании EqualsBuilder и HashcodeBuilder из apache commons-lang, чтобы обойти это, но я не на 100% счастлив: S.
Мне следовало добавить ту часть кода, который я пишу для этого проекта это библиотека, которая будет использоваться другими бизнес-подразделениями ... И также будет поддерживаться другой командой: S.