Почему org.apache.commons.lang.BooleanUtils.isTrue(Boolean bool) использует тернарный оператор?
I F3'd в это без особой причины, и был удивлен, увидев, что этот метод реализован следующим образом:
public static boolean isTrue(Boolean bool) {
if (bool == null) {
return false;
}
return bool.booleanValue() ? true : false;
}
Почему бы и нет?
public static boolean isTrue(Boolean bool) {
if (bool == null) {
return false;
}
return bool.booleanValue();
}
Это не имеет большого значения, поэтому я подумал, есть ли для этого какая-то польза? Читаемость является достаточно слабым аргументом, я считаю, что это шум. Если нет какой-то другой пользы, которой я не хватает.
Ответы
Ответ 1
Я не могу найти оправданной причины.
Спецификация API для Java говорит:
public boolean booleanValue()
Возвращает значение этого Boolean-объекта в виде булева примитива.
Итак, если наш объект bool:
Boolean bool = new Boolean(true);
Это эквивалентно:
bool.booleanValue() == true;
Тройной компаратор здесь избыточен и уменьшает читаемость.
Ответ 2
Конечно, в вашем коде у вас одна атомная операция меньше.
См. Это для хорошего объяснения: fooobar.com/questions/534057/...
Ответ 3
Я не думаю, что есть окончательный ответ на то, почему он написал так, поскольку
Фелипе Фернандес указывает на отсутствие функциональных причин для этого.
Однако, я предполагаю, что это сделано, чтобы сделать метод симметричным с другими в том же классе, возвращающим объекты Boolean
, такие как toBooleanObject
public static Boolean toBooleanObject(boolean bool) {
return bool ? Boolean.TRUE : Boolean.FALSE;
}