2012-01-17 17 views
101

So che c'è un modo per la scrittura di Java Se dichiarazione in forma breveabbreviazione di Java Se dichiarazione

if (city.getName() != null) { 
    name = city.getName(); 
} else { 
    name="N/A"; 
} 

Qualcuno sa come scrivere forma breve per sopra i 5 linee in una sola riga ...

+2

google [operatore ternario in java] (https://www.google.com/search?q=ternary+operator+java) :) – CoolBeans

+1

Presumo che tu abbia la logica 'if' nel modo sbagliato. – NPE

+4

'if (city.getName()!= null) {name = city.getName();} else {name = "N/A"} ' –

risposta

248

Utilizzare l'operatore ternario:

name = ((city.getName() == null) ? "N/A" : city.getName()); 

penso che tu abbia le condizioni indietro - se si tratta di nulla, si desidera che il valore essere "N/A".

E se città è nullo? Il tuo codice * colpisce il letto in quel caso. Mi piacerebbe aggiungere un altro controllo:

name = ((city == null) || (city.getName() == null) ? "N/A" : city.getName()); 
+9

+1, anche se si hanno parentesi ridondanti. Avrei scritto: 'name = city.getName() == null? "N/A": city.getName(); ' –

+12

Una questione di stile e gusto: mi piace rendere chiaro il raggruppamento della clausola booleana. – duffymo

+3

Qualunque cosa - ho usato il teorema di DeMorgan e ottenuto ciò di cui avevi bisogno. Non è necessario modificare, purché si esprima correttamente la logica. – duffymo

4
name = (city.getName() != null) ? city.getName() : "N/A"; 
-3
name = city.getName()!=null?city.getName():"N/A" 
+2

Invece di pubblicare semplicemente del codice, aiuteresti OP di più spiegando la tecnica. Come funziona, perché funziona? – Zabuza

+0

Mettere gli spazi attorno agli operatori rende molto più facile la lettura e la manutenzione. – geowar

18

Il modo per farlo è con operatore ternario:

name = city.getName() == null ? city.getName() : "N/A" 

Tuttavia, credo che si dispone di un errore di battitura nel codice sopra, e vuoi dire a dire:

if (city.getName() != null) ... 
16

di evitare di chiamare due volte .getName() userei

name = city.getName(); 
if (name == null) name = "N/A"; 
+1

In un sistema multiutente con una città mutabile, potrebbe esserci un 'city.setName (null)' interposto. La tua risposta risponde perfettamente. – emory

4

È possibile scrivere le dichiarazioni if, else if, else in forma abbreviata. Per esempio:

Boolean isCapital = city.isCapital(); //Object Boolean (not boolean) 
String isCapitalName = isCapital == null ? "" : isCapital ? "Capital" : "City";  

Questo è breve sotto forma di:

Boolean isCapital = city.isCapital(); 
String isCapitalName; 
if(isCapital == null) { 
    isCapitalName = ""; 
} else if(isCapital) { 
    isCapitalName = "Capital"; 
} else { 
    isCapitalName = "City"; 
} 
+1

Questo non è stato chiesto così ancora -1. – Makky

11

L'? : Operatore in Java

In Java si potrebbe scrivere:

if (a > b) { 
    max = a; 
} 
else { 
    max = b; 
} 

Impostazione di una singola variabile per uno dei due stati sulla base di una sola condizione è un uso così comune di if-else che un collegamento ha stato progettato per questo, l'operatore condizionale,?:. Utilizzando l'operatore condizionale è possibile riscrivere l'esempio di cui sopra in una sola riga come questa:

max = (a > b) ? a : b; 

(a> b)? a: b; è un'espressione che restituisce uno dei due valori, a o b. La condizione, (a> b), è testata. Se è vero il primo valore, viene restituito un. Se è falso, viene restituito il secondo valore, b. A prescindere dal valore restituito dipende dal test condizionale, a> b. La condizione può essere qualsiasi espressione che restituisce un valore booleano.

2
name = ((city.getName() == null)? "N/A" : city.getName()); 

in primo luogo viene verificata la condizione (city.getName() == null). Se sì, allora "N/A" viene assegnato al nome o semplicemente name="N/A" o altrimenti il ​​valore da city.getName() viene assegnato al nome, vale a dire name=city.getName().

Cose da guardare qui:

  1. condizione è tra parentesi, seguito da un punto interrogativo. Ecco perché scrivo (city.getName() == null)?. Qui il punto interrogativo è giusto dopo la condizione. Facile da vedere/leggere/indovinare anche!
  2. valore a sinistra di due punti (:) e valore destra del numero di punti (a) il valore a sinistra dei due punti viene assegnato quando la condizione è vera, altrimenti il ​​valore a destra di due punti viene assegnato alla variabile.

ecco un riferimento: http://www.cafeaulait.org/course/week2/43.html

9

Sono sempre dimenticando come utilizzare il ?:ternary operator. Questa risposta supplementare è un promemoria rapido. È una scorciatoia per if-then-else.

myVariable = (testCondition) ? someValue : anotherValue; 

dove

  • () detiene il if
  • ? significa then
  • : significa else

È lo stesso

if (testCondition) { 
    myVariable = someValue; 
} else { 
    myVariable = anotherValue; 
} 
1

Utilizzare org.apache.commons.lang3.StringUtils:

name = StringUtils.defaultString(city.getName(), "N/A"); 
0

semplice & chiaro:

String manType = hasMoney() ? "rich" : "poor"; 

versione lunga:

 String manType; 
    if (hasMoney()) { 
     manType = "rich"; 
    } else { 
     manType = "poor"; 
    } 

o come sto usando per essere chiaro per gli altri lettori di codici:

String manType = "poor"; 
    if (hasMoney()) 
     manType = "rich"; 
-2

È possibile utilizzare operatore ternario in java.

Sintassi:

Condition ? Block 1 : Block 2 

Quindi, nel codice si può fare in questo modo,

name = ((city.getName() == null) ? "N/A" : city.getName()); 

Per maggiori informazioni è possibile consultare this risorsa.

+1

Questa è una domanda di 6 anni e ha accettato la risposta. La tua risposta non fornisce nulla di nuovo -1 – Makky

Problemi correlati