В большинстве случаев, когда объект является необязательным, можно использовать Guava, чтобы помочь в случае проверки на нуль. Но в тех случаях, когда утверждение используется, чтобы решить, будет ли метод возвращаться раньше (из того, что я испытал), даже этого недостаточно.
Мой вопрос касается использования вложенных операторов if для возврата значения по умолчанию вместо продолжения выполнения метода.
Вот пример того, что я имею в виду:
private MyObject myMethod(Object object, Object object1, Object object2) {
/* inherent implementations for first if-statement... */
if (object == null) {
/* inherent implementations for second if-statement... */
if (object1 == null) {
return new MyObject();
}
/* inherent implementations for third if-statement... */
if (object2 == null) {
return new MyObject();
}
} else {
/*same structure shown in if-statement...*/
}
/* inherent implementations before last return statement... */
return new MyObject(/* with args */);
}
Я ищу решение, которое решает проблемы когнитивной сложности, указанные sonarQube, в которых количество операторов if и if, используемых в методе, увеличивает сложность кода.
Другими словами, способы извлечения операторов из метода в другой метод или их решения другими способами, не требующими операторов if.
РЕДАКТИРОВАТЬ (05/09) : Во-первых, спасибо за все предоставленные ответы, но я полагаю, что есть некоторая деталь, которую я забыл упомянуть. Каждый из /* implementations... */
, упомянутых в приведенном мною фрагменте кода, обладает определенным типом функциональных возможностей, которые должны быть выполнены до следующего оператора if, поэтому предложения типа if (object1 == null || object2 == null)
не нужны. О предложении использовать Optional.or
в Java 9: из того, что я слышал, Java 8 является в настоящее время наиболее стабильной версией Java, поэтому в худшем случае мне придется ждать Java 11. Также каждый из упомянутых /* implementations... */
имеет чтобы быть выполненным по порядку, чтобы сделать каждую из этих деталей более явной, я немного переработал фрагмент кода, который я предоставил ранее.