2012-09-28 18 views
13

Estoy tratando de usar? para decidir qué método quiero llamar, pero no necesito asignar una variable. Mi pregunta: ¿hay alguna manera de utilizar el operador ternario sin asignar una variable?JAVA llamando a un método usando un operador ternario

(something i dont need) = (x == 1)? doThisMethod():doThatMethod() 

en lugar de

if(x == 1) { 
    doThisMethod() 
} else { 
    doThatMethod() 
} 
+0

¿Has probado con los métodos 'void' y no hay ningún objetivo de asignación? (Nunca lo hice, pero no está claro que no funcionaría). –

+1

lo siento, mi respuesta fue incorrecta: usted no puede usar el operador ternario como una sola declaración en java; usted puede en C. – pb2q

Respuesta

15

Esto no funciona, ya que no es el uso previsto del operador ternario.

Si realmente quiere que sea la línea 1, se puede escribir:

if (x==1) doThisMethod(); else doThatMethod(); 
+0

Esto funcionó. y gracias por el conocimiento. Quiero que sea fácil para otras personas seguirlo. –

+1

-1: completamente incorrecto. Esto no tiene nada que ver con el tipo de devolución del método. Cambiar los métodos para devolver (decir) 'int' o' Object' no arreglaría el error de sintaxis. – ruakh

+0

@ruakh, la pregunta que hice fue, básicamente, ¿puedo hacer que el operador ternario sea básicamente un vacío para que no tenga que asignar una variable? para la pregunta que me aske esta es la mejor respuesta. (porque, en realidad, no necesitaba el operador ternario, solo un "else", así que si alguien obtiene el -1, es mi. –

5

Dudo que esto funciona. El JLS §15.25 define la expresión ternaria como sigue:

ConditionalExpression: 
    ConditionalOrExpression 
    ConditionalOrExpression ? Expression : ConditionalExpression 

Y un ConditionalExpression no es un Statement por sí mismo. Sin embargo, se puede usar en varios otros lugares, p. un Assignment:

AssignmentExpression: 
    ConditionalExpression 
    Assignment 

Assignment: 
    LeftHandSide AssignmentOperator AssignmentExpression 
-4

Mucho más diversificado, si el flujo se fuera a romper después del método call.this se puede utilizar, pero una palabra de precaución si el flujo no se rompe después de si se ejecutarán ambos métodos.

if (x==1) 
doThisMethod(); 
doThatMethod(); 
+0

Esto llamará 'doThatMethod();' todo el tiempo, sin importar qué x sea. – hinneLinks

+0

@hinneLinks lo hizo un poco más detallado, lo siento por la confusión –

+0

Si te refieres a 'return doThisMethod();' entonces deberías escribirlo. Si quiere decir que confía en 'doThisMethod()' para lanzar una excepción con el fin de evitar la llamada de 'doThatMethod();' esto sería un estilo de código muy malo, nadie esperaría eso. – hinneLinks

Cuestiones relacionadas