2012-04-21 19 views
11

Tengo un método que realiza muchas comprobaciones y cálculos y devuelve una clase personalizada, returnMessage. returnMessage tiene 2 booleanos y una cadena. Lo que quiero hacer es ejecutar este método en un ciclo while desde mi clase principal y tener acceso al objeto returnMessage después de que el ciclo while termine por última vez.Asignar variable en Java while-loop conditional?

en PHP que este sería un caso de

while ($returned = myObject->myMethod()->finished) 
{ 

} 

if($returned -> finished == FALSE) 
{ 
... 
} 

Sin embargo intentar asignar como esto me da un error de booleano esperado en Java (que puede haber errores de PHP en lo anterior, es tarde: D)

+0

La diferencia entre PHP y Java aquí es que 'while' en Java * requiere * una expresión de tipo booleano (' someVar = boolExpr' es en sí misma una expresión de tipo booleano). Si la variable asignada fuera un 'bool', sería idéntica. Por favor, muestre el código * actual * Java, ya que es probable que se esté asignando algo que no sea bool. En cualquier caso, con pocas excepciones, recomendaría * no * el uso de esta expresión idiomática ... –

Respuesta

27

necesitamos ver más de su código, pero adivinando un poco creo que algo como esto funcionaría:

ReturnMessage returned; 
while (!(returned = myObject.myMethod()).finished) { 

} 
if (!returned.finished) { 

} 
1

esto es posible al igual que

while((returned=myObject.myMethod()).isFinished()){ 

} 

o para ser más precisos (returned=myObject.myMethod()) asigna el objeto devuelto a returned y se puede utilizar como una normalidad var

2

Mientras aceptable en PHP, supongo (no lo hago código en PHP), se considera una forma extremadamente mala hacer una tarea dentro de un condicional en Java. (Esto es porque es propenso a errores y muy difícil de detectar, la diferencia es entre = y == en medio de una gran cantidad de código. Esta fue una elección deliberada basada en años de experiencia con C y C++)

Tal como está, no puedo seguir tu código. Usted dice "returnMessage tiene 2 booleanos y una cadena" pero la prueba, como la entiendo en PHP, es myObject->myMethod()->finished != null y returned se establece en el valor de finished, pero luego prueba $returned -> finished que es lo mismo que myObject->myMethod()->finished->finished. Lo siento si malinterpreto la sintaxis de PHP.

La recomendación general en Java sería más largo de las líneas de:

ReturnMessage returned = myObject.myMethod().getFinished(); 
while (returned != null) { 

    ... 

    returned = myObject.myMethod().getFinished(); // or did you mean myObject.myMethod(); 
} 

if (!returned.finished) { // or, better: if (!returned.isFinished()) 
    ... 
} 

Si no he entendido bien el PHP, hágamelo saber y voy a arreglar el código Java para que coincida.

+0

esto nunca entraría en el ciclo while. – Highstead

+0

@Highstead: Solucionado. –

Cuestiones relacionadas