Какой самый краткий способ получить обратное логическое значение Java?
Если у вас есть логическая переменная:
boolean myBool = true;
Я мог бы получить обратное с помощью предложения if/else:
if (myBool == true)
myBool = false;
else
myBool = true;
Есть ли более краткий способ сделать это?
5 ответов
Просто назначьте, используя логический оператор НЕ !
как вы обычно делаете в своих условияхif
, for
, while
...). Вы уже работаете с логическим значением, поэтому оно будет переворачиваться true
в false
(и наоборот):
myBool = !myBool;
Еще более прохладный способ (это более кратко, чем myBool = !myBool
для имен переменных длиннее 4 символов, если вы хотите установить переменную):
myBool ^= true;
И, кстати, не используйте if (something == true)
, это проще, если вы просто делаете if (something)
(то же самое, сравнивая с ложным, используйте оператор отрицания).
Для boolean
это довольно легко, Boolean
немного сложнее.
boolean
только 2 возможных состояния:true
а такжеfalse
,Boolean
с другой стороны, имеет 3:Boolean.TRUE
,Boolean.FALSE
или жеnull
,
Предполагая, что вы просто имеете дело с boolean
(который является примитивным типом), то самое простое:
boolean someValue = true; // or false
boolean negative = !someValue;
Однако, если вы хотите инвертировать Boolean
(который является объектом), вы должны следить за null
значение, или вы можете в конечном итоге с NullPointerException
,
Boolean someValue = null;
Boolean negativeObj = !someValue.booleanValue(); --> throws NullPointerException.
Предполагая, что это значение никогда не равно нулю, и что ваша компания или организация не имеет правил кодирования, запрещающих автоматическое (не) боксирование. Вы можете просто написать это в одну строку.
Boolean someValue = Boolean.TRUE; // or Boolean.FALSE
Boolean negativeObj = !someValue;
Однако, если вы хотите позаботиться о null
ценности также. Тогда есть несколько интерпретаций.
boolean negative = !Boolean.TRUE.equals(someValue); //--> this assumes that the inverse of NULL should be TRUE.
// if you want to convert it back to a Boolean object, then add the following.
Boolean negativeObj = Boolean.valueOf(negative);
С другой стороны, если вы хотите null
остаться null
после инверсии, вы можете рассмотреть возможность использования apache commons
учебный класс BooleanUtils
( см. Javadoc)
Boolean someValue = null; // or Boolean.TRUE or Boolean.FALSE;
Boolean negativeObj = BooleanUtils.negate(someValue);
Некоторые предпочитают просто записывать все это, чтобы избежать зависимости от apache.
Boolean someValue = null; // or Boolean.TRUE or Boolean.FALSE;
boolean negative = (someValue == null)? null : !someValue.booleanValue();
Boolean negativeObj = Boolean.valueOf(negative);
Самый краткий способ - не инвертировать логическое значение, а просто использовать! MyBool позже в коде, когда вы хотите проверить обратное условие.