C'è un modo migliore per negare un booleano in Java che un semplice if-else?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
C'è un modo migliore per negare un booleano in Java che un semplice if-else?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
Risposte:
theBoolean = !theBoolean;
!!bool == !(!(bool)) == bool.
--operatore (in realtà, due di loro, insieme a due ++operatori), ma non definisce un !!operatore. Se vuoi -(-(integer))puoi usare uno spazio bianco tra i due -personaggi. Ma !!analizza come due !operatori indipendentemente dallo spazio bianco.
theBoolean ^= true;
Meno sequenze di tasti se la variabile è più lunga di quattro lettere
Modifica : il codice tende a restituire risultati utili se utilizzato come termine di ricerca di Google. Il codice sopra non lo fa. Per chi ne ha bisogno, è XOR bit a bit come descritto qui .
theBoolean = !theBoolean;otheBoolean = theBoolean ? false : true;
Il modo "ovvio" (per la maggior parte delle persone)
theBoolean = !theBoolean;
Il modo "più breve" (il più delle volte)
theBoolean ^= true;
Il modo "più visivo" (più incerto)
theBoolean = theBoolean ? false : true;
theMethod( theBoolean ^= true );
Poiché l'operatore di assegnazione restituisce sempre ciò che è stato assegnato, questo commuta il valore tramite l'operatore bit a bit, quindi restituisce il valore appena assegnato da utilizzare nella chiamata del metodo.
CSicuramente, ma in Javaesso non è permesso mescolare booleano e intero (anche cose come while(1)Java non sono possibili).
Se usi valori NULL booleani e li consideri falsi, prova questo:
static public boolean toggle(Boolean aBoolean) {
if (aBoolean == null) return true;
else return !aBoolean;
}
Se non stai consegnando valori NULL booleani, prova questo:
static public boolean toggle(boolean aBoolean) {
return !aBoolean;
}
Questi sono i più puliti perché mostrano l'intento nella firma del metodo, sono più facili da leggere rispetto al ! operatore e può essere facilmente eseguito il debug.
uso
boolean bTrue = true
boolean bFalse = false
boolean bNull = null
toggle(bTrue) // == false
toggle(bFalse) // == true
toggle(bNull) // == true
Naturalmente, se si utilizza Groovy o una lingua che consente metodi di estensione, è possibile registrare un'estensione e semplicemente:
Boolean b = false
b = b.toggle() // == true
Booleane attivalo realmente all'interno del metodo (ma ancora in qualche modo ambiguo).
Questa risposta è venuta alla ricerca di "java invert boolean function". L'esempio seguente eviterà che alcuni strumenti di analisi statica falliscano le build a causa della logica di branching. Questo è utile se devi invertire un valore booleano e non hai sviluppato test unitari completi;)
Boolean.valueOf(aBool).equals(false)
o in alternativa:
Boolean.FALSE.equals(aBool)
o
Boolean.FALSE::equals
Boolean.FALSE::equalsa una funzione di mappatura invece di scrivere un po 'di lambda
Se non stai facendo nulla di particolarmente professionale, puoi sempre usare una classe Util. Ad esempio, una classe util da un progetto per una classe.
public class Util {
public Util() {}
public boolean flip(boolean bool) { return !bool; }
public void sop(String str) { System.out.println(str); }
}
quindi basta creare un oggetto Util
Util u = new Util();
e avere qualcosa per il ritornoSystem.out.println( u.flip(bool) );
Se finirai per usare sempre la stessa cosa, usa un metodo e soprattutto se si tratta di progetti, crea una classe Util. Non so quale sia lo standard del settore, tuttavia. (I programmatori esperti si sentono liberi di correggermi)
La classe BooleanUtilssupporta la negazione di un booleano. Trovi questa classe in commons-lang: commons-lang
BooleanUtils.negate(theBoolean)
Prima:
boolean result = isresult();
if (result) {
result = false;
} else {
result = true;
}
Dopo:
boolean result = isresult();
result ^= true;