Есть ли лучший способ отрицать логическое значение в Java, чем простое if-else?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
Есть ли лучший способ отрицать логическое значение в Java, чем простое if-else?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
theBoolean ^= true;
Меньше нажатий клавиш, если ваша переменная длиннее четырех букв
Изменить: код имеет тенденцию возвращать полезные результаты при использовании в качестве условий поиска Google. В приведенном выше коде нет. Для тех, кому это нужно, это побитовый XOR как описано здесь.
theBoolean ^= shouldBeNegated;
- person estani; 03.07.2014
theBoolean = !theBoolean;
или theBoolean = theBoolean ? false : true;
- person Blaine Kasten; 28.07.2014
true
в классе T
и называете ее t
, вы можете сохранить одно дополнительное нажатие клавиши: myVal ^= T.t;
. Не говоря уже о статическом импорте ... _5 _... Безлимитный пух!
- person Timmos; 21.04.2016
"Очевидный" способ (для большинства людей)
theBoolean = !theBoolean;
Самый "короткий" путь (в большинстве случаев)
theBoolean ^= true;
Самый "наглядный" способ (наиболее неопределенно)
theBoolean = theBoolean ? false : true;
theMethod( theBoolean ^= true );
Поскольку оператор присваивания всегда возвращает то, что было присвоено, он переключит значение с помощью побитового оператора, а затем вернет вновь присвоенное значение, которое будет использоваться в вызове метода.
C
определенно, но в Java
нельзя смешивать логические и целые числа (в Java также нельзя использовать такие вещи, как while(1)
).
- person Levite; 05.04.2018
Этот ответ возник при поиске «java invert boolean function». В приведенном ниже примере предотвращается сбой сборки некоторых инструментов статического анализа из-за логики ветвления. Это полезно, если вам нужно инвертировать логическое значение и вы не создали исчерпывающих модульных тестов;)
Boolean.valueOf(aBool).equals(false)
или альтернативно:
Boolean.FALSE.equals(aBool)
or
Boolean.FALSE::equals
Boolean.FALSE::equals
функции сопоставления вместо того, чтобы писать небольшую лямбду.
- person Patrick Parker; 11.11.2019
Если вы используете логические значения NULL и считаете их ложными, попробуйте следующее:
static public boolean toggle(Boolean aBoolean) {
if (aBoolean == null) return true;
else return !aBoolean;
}
Если вы не передаете логические значения NULL, попробуйте следующее:
static public boolean toggle(boolean aBoolean) {
return !aBoolean;
}
Это самые чистые, потому что они показывают намерение в сигнатуре метода, их легче читать по сравнению с оператором ! и легко отлаживать.
использование
boolean bTrue = true
boolean bFalse = false
boolean bNull = null
toggle(bTrue) // == false
toggle(bFalse) // == true
toggle(bNull) // == true
Конечно, если вы используете Groovy или язык, который позволяет использовать методы расширения, вы можете зарегистрировать расширение и просто сделать:
Boolean b = false
b = b.toggle() // == true
Boolean
и действительно переключите его внутри метода (но все же несколько неоднозначно).
- person Levite; 01.02.2019
Класс BooleanUtils
поддерживает отрицание логического значения. Вы найдете этот класс в commons-lang: commons-lang
BooleanUtils.negate(theBoolean)
Если вы не делаете ничего особенно профессионального, вы всегда можете использовать класс Util. Пример: класс утилиты из проекта для класса.
public class Util {
public Util() {}
public boolean flip(boolean bool) { return !bool; }
public void sop(String str) { System.out.println(str); }
}
затем просто создайте объект Util Util u = new Util();
и получите что-нибудь для возврата System.out.println( u.flip(bool) );
Если вы собираетесь использовать одно и то же снова и снова, используйте метод, и особенно, если он используется в разных проектах, создайте класс Util. Однако не знаю, что такое отраслевой стандарт. (Опытные программисты меня поправляют)
К сожалению, нет краткой формы, например, у чисел есть увеличение / уменьшение:
i++;
Я хотел бы иметь аналогичное короткое выражение для инвертирования логического значения dmth, например:
пустой!;
До:
boolean result = isresult();
if (result) {
result = false;
} else {
result = true;
}
После:
boolean result = isresult();
result ^= true;
!!bool == !(!(bool)) == bool
.
- person Christoffer Hammarström; 21.07.2011
--
(фактически, два из них вместе с двумя операторами ++
), но не определяет оператор !!
. Если вы хотите -(-(integer))
, вы можете использовать пробел между двумя символами -
. Но !!
анализирует как два !
оператора независимо от пробелов.
- person Ted Hopp; 27.01.2017
bool!!
- person mid; 19.07.2017