Самый чистый способ переключения логической переменной в Java?

Есть ли лучший способ отменить логическое в Java, чем простое if-else?

if (theBoolean) {
    theBoolean = false;
} else {
    theBoolean = true;
}

Ответ 1

theBoolean = !theBoolean;

Ответ 2

theBoolean ^= true;

Меньше нажатий клавиш, если ваша переменная длиннее четырех букв

Ответ 3

Есть несколько

"Очевидный" способ (для большинства людей)

theBoolean = !theBoolean;

Самый короткий путь (большую часть времени)

theBoolean ^= true;

"Самый визуальный" способ (наиболее неуверенно)

theBoolean = theBoolean ? false : true;

Дополнительно: переключение и использование в вызове метода

theMethod( theBoolean ^= true );

Так как оператор присваивания всегда возвращает то, что было назначено, это приведет к переключению значения с помощью побитового оператора, а затем вернет новое назначенное значение, которое будет использоваться в вызове метода.

Ответ 4

Если вы используете значения Boolean 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

Ответ 5

Если вы не занимаетесь чем-то особенно профессиональным, вы всегда можете использовать класс Util. Например, класс утилит из проекта для класса.

public class Util {


public Util() {}
public boolean flip(boolean bool) { return !bool; }
public void sop(String str) { System.out.println(str); }

}

затем просто создайте объект Util u = new Util(); и есть что-то для возврата System.out.println( u.flip(bool) );

Если вы собираетесь использовать одно и то же снова и снова, используйте метод, и особенно если он используется в разных проектах, создайте класс Util. Не знаю, что такое отраслевой стандарт. (Опытные программисты не стесняются меня поправлять)

Ответ 6

Этот ответ возник при поиске "булевой функции Java Invert". Приведенный ниже пример предотвратит сбой сборок некоторыми инструментами статического анализа из-за логики ветвления. Это полезно, если вам нужно инвертировать логическое значение и не создавать комплексные модульные тесты;)

Boolean.valueOf(aBool).equals(false)

или альтернативно:

Boolean.FALSE.equals(aBool)

или

Boolean.FALSE::equals

Ответ 7

До:

boolean result = isresult();
if (result) {
    result = false;
} else {
    result = true;
}

После:

boolean result = isresult();
result ^= true;