Я недавно переопределял методы equals
в объектах домена моего недавнего проекта Java. Поскольку мы используем Sonar для вычисления наших метрик кода, я сразу увидел циклическую сложность этих классов, превышающую порог.Как переопределить равные без увеличения цикломатической сложности?
Мне интересно, есть ли уловка, шаблон или опция вообще, чтобы этот показатель был низким, хотя и имел более сложный метод equals
.
EDIT: Вот один из моих примеров, который у меня есть, ничего конкретного, я бы сказал, просто чтобы мы знали, о чем мы говорим.
@Override
public boolean equals(Object o) {
if (o instanceof MyKey) {
MyKey other = (MyKey) o;
if (this.foo.longValue() == other.getFoo().longValue() &&
this.bar.equalsIgnoreCase(other.getBar()) &&
this.foobar.shortValue() == other.getFoobar().longValue()){
return true;
}
}
return false;
}
@Override
public int hashCode() {
int hash = 3;
hash = 53 * hash + foo.hashCode();
hash = 53 * hash + bar.hashCode();
hash = 53 * hash + foobar.hashCode();
return hash;
}
Вы не можете добавить код без добавления кода, я боюсь. Если логика переопределенного метода многократно используется, вы можете уменьшить общее увеличение путем повторного использования его через наследование, но все равно будет увеличение. –
Может быть, вы должны быть меньше раба для сонара. Если вы пишете плохой код, который радует робот-разум Сонара, он все равно будет плохим кодом. – Kayaman
Я думаю, вы могли бы попробовать метод 'Objects.equals'. Таким образом, вы исключите дополнительные инструкции if. – Enigo