2012-01-17 10 views
101

Sé que hay una manera de escribir java si la declaración en forma cortaForma corta para Java Si comunicado

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

¿alguien sabe cómo escribir para la forma corta de más de 5 líneas en una sola línea ...

+2

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

+1

Supongo que tiene su lógica 'if' al revés. – NPE

+4

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

Respuesta

248

Utilice el operador ternario:

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

creo que tienes las condiciones revés - si es nulo, se desea que el valor ser "N/A".

¿Qué pasa si la ciudad es nula? Tu código * golpea la cama en ese caso. Yo añadiría otro cheque:

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

+1, aunque tiene paréntesis redundantes. Yo habría escrito: 'name = city.getName() == null? "N/A": city.getName(); ' –

+12

Una cuestión de estilo y gusto: me gusta hacer que la agrupación de la cláusula booleana sea clara. – duffymo

+3

Lo que sea: utilicé el teorema de DeMorgan y obtuve lo que necesitabas. No es necesario editar, siempre y cuando exprese la lógica correctamente. – duffymo

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

En lugar de solo publicar un código, ayudarías más a OP explicando la técnica. ¿Cómo funciona? ¿Por qué funciona? – Zabuza

+0

Poner espacios alrededor de sus operadores hace que sea mucho más fácil de leer y mantener. – geowar

18

La manera de hacerlo es con el operador ternario:

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

Sin embargo, creo que tiene un error tipográfico en el código anterior, y que decir decir:

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

para evitar llamar .getName() dos veces me gustaría utilizar

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

En un sistema de usuario múltiple con una ciudad mutable, podría haber un 'city.setName (null)' intermedio. Tu respuesta lo maneja perfectamente. – emory

4

Puede escribir if, else if, else declaraciones en forma abreviada. Por ejemplo:

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

Ésta es la forma corta de:

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

Esto no se ha preguntado, por lo que todavía -1. – Makky

11

El? : Operador en Java

En Java se podría escribir:

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

Establecimiento de una sola variable a uno de dos estados en base a una sola condición es tal uso común de si-otra cosa que un acceso directo tiene sido ideado para ello, el operador condicional,?:. Usando el operador condicional puede reescribir el ejemplo anterior en una sola línea como la siguiente:

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

(a> b)? a: b; es una expresión que devuelve uno de dos valores, a o b. La condición, (a> b), se prueba. Si es verdadero, se devuelve el primer valor, a. Si es falso, se devuelve el segundo valor, b. El valor que se devuelve depende de la prueba condicional, a> b. La condición puede ser cualquier expresión que devuelva un valor booleano.

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

Primero, se comprueba la condición (city.getName() == null). Si es así, entonces "N/A" se asigna a nombre o simplemente name="N/A" o bien el valor de city.getName() se asigna al nombre, es decir, name=city.getName().

Cosas a tener en cuenta aquí:

  1. condición es en el paréntesis seguido de un signo de interrogación. Es por eso que escribo (city.getName() == null)?. Aquí el signo de interrogación es justo después de la condición. ¡Fácil de ver/leer/adivinar incluso!
  2. value left of colon (:) y value right of colon (a) el valor dejado de dos puntos se asigna cuando la condición es verdadera; de lo contrario, se asigna el valor de dos puntos a la variable.

aquí es una referencia: http://www.cafeaulait.org/course/week2/43.html

9

Siempre me olvido algo cómo utilizar el ?:ternary operator. Esta respuesta suplementaria es un recordatorio rápido. Es abreviatura de if-then-else.

myVariable = (testCondition) ? someValue : anotherValue; 

donde

  • () sostiene la if
  • ? significa then
  • : significa else

Es el mismo que

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

Use org.apache.commons.lang3.StringUtils:

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

simple & clara:

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

versión larga:

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

o cómo lo estoy usando para ser claro para otros lectores de códigos:

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

Usted puede utilizar el operador ternario en Java.

Sintaxis:

Condition ? Block 1 : Block 2 

Así que en su código que puede hacer como esto,

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

Para más información puede consultar this recursos.

+1

Esta es una pregunta de hace 6 años y ha aceptado una respuesta. Tu respuesta no proporciona nada nuevo -1 – Makky

Cuestiones relacionadas