При условии, что методы get не имеют побочных эффектов и возвращают всегда одно и то же значение (в рамках вашего примера), вы можете использовать рефакторинг Извлечь переменную
s = dispensingOccasionModel.getOccasionDTO () .getAdminState ());
Кроме того, вы можете статически импортировать AdministrativeState. *.
Затем вы получите:
AdministrativeState s =dispensingOccasionModel.getOccasionDTO().getAdminState();
if (!(((PLANNED == s) || (MISSED == s ) || (SKIPPED == s) ||
(SELF_ADMINISTERED == s) ||
(SELF_ADMINISTERED_BY_RANGE == s))
&& isSpecialDoseType(doseDetail))
Затем с учетом того, что двойной каналОператор (логическое ИЛИ) имеет довольно высокий приоритет, поэтому вы можете убрать круглые скобки вокруг отдельных сравнений:
(a==b)||(c==d) ===> a==b||c==d.
Вы получите:
if (!((PLANNED == s ||
MISSED == s ||
SKIPPED == s ||
SELF_ADMINISTERED == s ||
SELF_ADMINISTERED_BY_RANGE == s))
&& isSpecialDoseType(doseDetail))
После двойных скобок!И до &&.Их можно уменьшить до одного.
if (!(PLANNED == s ||
MISSED == s
|| SKIPPED == s ||
SELF_ADMINISTERED == s ||
SELF_ADMINISTERED_BY_RANGE == s)
&& isSpecialDoseType(doseDetail))
Теперь вы можете использовать правило инвертирования логических выражений:
!(a==b|| c==d) ===> a!=b&&c!=d,
, которое в основном инвертирует все операции из-за НЕ (!) Оператор.Поскольку у вас останутся только операторы && для объединения логических подвыражений, вы можете убрать круглые скобки.
if (PLANNED != s
&& MISSED != s
&& SKIPPED != s
&& SELF_ADMINISTERED != s
&& SELF_ADMINISTERED_BY_RANGE != s
&& isSpecialDoseType(doseDetail)
)
Теперь, если у вас есть хорошие знания предметной области, вы можете знать, можете ли вы объединить self Administered в одну переменную иотправлены / пропущены в другой, чтобы иметь что-то вроде: ни (запланировано, ни остановлено, ни зарегистрировано самостоятельно) && isSpecial.Но без такого знания я бы жил выражением на этом уровне.