Предположим, что у меня есть этот код:Присвоить значение конечной переменной
public HttpResponse myFunction(...) {
final HttpResponse resp;
OnResponseCallback myCallback = new OnResponseCallback() {
public void onResponseReceived(HttpResponse response) {
resp = response;
}
};
// launch operation, result will be returned to myCallback.onResponseReceived()
// wait on a CountDownLatch until operation is finished
return resp;
}
Очевидно, что я не могу присвоить значение Респ из onResponseReceived, потому что это окончательная переменная, НО если это не было окончательным переменной onResponseReceived не мог этого видеть. Затем, как я могу присвоить значение в соответствии с onResponseReceived?
Что я думал о создании класса-оболочки для включения объекта resp. Конечным объектом будет экземпляр этого класса-оболочки, и я мог бы присвоить значение, действующее на объект внутри конечного класса (что не является окончательным).
код будет такой:
class ResponseWrapper {
HttpResponse resp = null;
}
public HttpResponse myFunction(...) {
final ResponseWrapper respWrap = new ResponseWrapper();
OnResponseCallback myCallback = new OnResponseCallback() {
public void onResponseReceived(HttpResponse response) {
respWrap.resp = response;
}
};
// launch operation, result will be returned to myCallback.onResponseReceived()
// wait on a CountDownLatch until operation is finished
return respWrap.resp;
}
Что вы думаете об этом решении?
Прежде всего, это работает? Вы попробовали это, чтобы увидеть результат? –
Да, это работает, но я не знаю, является ли это хорошим способом решения этой общей проблемы. – Massimo
Тогда это, вероятно, лучший пост для http://codereview.stackexchange.com/ –