Назначить переменную в Java while-loop условной?

У меня есть метод, который выполняет много проверок и вычислений и возвращает пользовательский класс returnMessage. returnMessage имеет 2 булина и строку. То, что я хочу сделать, это запустить этот метод в цикле while из моего основного класса и получить доступ к объекту returnMessage после того, как цикл while завершится в последний раз.

В php это будет случай

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

}

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

Однако попытка назначить, как это, дает мне логическую ожидаемую ошибку в java (могут быть ошибки php в приведенном выше, это поздно: D)

Ответ 1

Нам нужно больше узнать о вашем коде, но немного подумав, я думаю, что что-то вроде этого будет работать:

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

}
if (!returned.finished) {

}

Ответ 2

В то время как допустимо в PHP, я предполагаю (я не кодирую в PHP), это считается крайне плохой формой для выполнения задания в условном выражении на Java. (Это связано с тем, что он подвержен ошибкам и очень трудно определить, разница между = и == в середине большого количества кода. Это был преднамеренный выбор, основанный на многолетнем опыте работы с C и С++.)

Как бы то ни было, я не могу полностью следовать вашему коду. Вы говорите: "returnMessage имеет 2 булеана и строку", но тест, как я понимаю, в PHP, myObject->myMethod()->finished != null и returned получает значение finished, но затем вы идете и тестируете $returned -> finished, который совпадает с myObject->myMethod()->finished->finished. Извините, если я неправильно понимаю синтаксис PHP.

Общая рекомендация в Java будет более похожа на:

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())
    ...
}

Если я неправильно понял PHP, дайте мне знать, и я исправлю код Java, чтобы он соответствовал.

Ответ 3

это возможно так:

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

}

или, точнее, (returned=myObject.myMethod()) присваивает объект, возвращенный returned, и вы можете использовать его как обычный var