Operador Ternario – JAVA

Es posible cambiar esto:

if(String!= null) { callFunction(parameters); } else { // Intentionally left blank } 

… a un operador ternario?

Bueno, el ternary operator en Java actúa así …

 return_value = (true-false condition) ? (if true expression) : (if false expression); 

… Otra forma de verlo …

 return_value = (true-false condition) ? (if true expression) : (if false expression); 

Tu pregunta es un poco vaga y tenemos que asumirla aquí.

  • Si (y solo si) callFunction(...) declara un non-void retorno non-void ( Object , String , int , double , etc.) – parece que no lo hace a través de tu código – entonces podrías hacer esto …

     return_value = (string != null) ? (callFunction(...)) : (null); 
  • Si callFunction(...) no devuelve un valor, ¡entonces no puede usar el operador ternario! Simple como eso. Usará algo que no necesita.

    • Publique más código para aclarar cualquier problema

¡No obstante, el operador ternario debe representar asignaciones alternativas solamente! Tu código no parece hacer eso, por lo que no deberías estar haciendo eso.

Así es como deberían funcionar …

 if (obj != null) { // If-else statement retVal = obj.getValue(); // One alternative assignment for retVal } else { retVal = ""; // Second alternative assignment for retVale } 

Esto se puede convertir a …

 retVal = (obj != null) ? (obj.getValue()) : (""); 

Dado que parece que podría estar tratando de refactorizar este código para que sea de una sola línea, he agregado lo siguiente

Además, si tu cláusula falsa está realmente vacía, entonces puedes hacer esto …

 if (string != null) { callFunction(...); } // Take note that there is not false clause because it isn't needed 

O

 if (string != null) callFunction(...); // One-liner 

Sí. Puedes mantener el mismo null en el bloque else .

 String result = str !=null ? callFunction(parameters) : null; 

Asegúrese de que callFunction(parameters) devuelva un String .

El operador ternario se puede usar para combinar dos expresiones, pero una statement vacía no es una expresión.

Una invocación a un método se puede usar como una expresión si el método devuelve un valor (léase: no se declara void ) y se podría usar junto con una constante ficticia null para formar un operador ternario pero el resultado sería una expresión que no es permitido en lugares donde se requiere una statement , en otras palabras, no puede reemplazar una instrucción if .

Al agregar otra construcción tomando una expresión e imponiendo ningún efecto secundario adicional, puede construir un reemplazo completo. Por ejemplo, al declarar y asignar una variable local nueva, que de otro modo no se utilizaría, obtienes:

 Object dummy=condition? callFunction(parameters): null; 

Pero no hay beneficio sobre simplemente decir if(condition) callFunction(parameters); . Incluso podría agregar una sobrecarga innecesaria, ya que llevará a cabo el auto-boxing si el valor de retorno es de tipo primitivo.

Con Java 8 hay una solución para el rompecabezas que funciona incluso para métodos void :

 ((Runnable)(condition? ()->callFunction(parameters): ()->{})).run(); 

pero aún no tiene ninguna ventaja sobre simplemente usar if .

Podría ser posible si su método callFunction() tiene un tipo de devolución. Entonces, podrías hacerlo como SURESH ATTA escribió en su respuesta:

 String result = str!=null ? callFunction(str) : null; 

O con cualquier otro tipo para resultado o cualquier otro argumento. Si desea llamar a un método en else State también, este debe tener el mismo tipo de devolución que el de su estado if .

Si su método no tiene un tipo de devolución / el tipo de callFunction() de callFunction() es void , no es posible cambiar su ifelse -statement en un operador ternario.