Передать в класс функцию для выполнения из класса

Не пинайте сильно новичка в java. Мне нужно реализовать такой функционал: Есть свой класс myOkHttpClient в нем обрабатывается ответ от сервера по событию onResponse() Мне нужно чтобы по получению ответа передать этот ответ назад в место вызова. Т.е. что-то типа такого:

myOkHttpClient myClient = new myOkHttpClient(MainActivity.this, SERVER_URL);
myClient.getResponse((response) -> {
// сделать что-то с response
});

public class myOkHttpClient {
// много кода
 public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
 // тут вернуть response назад в место вызова
 }
}

Полагаю, что подход, который можно реализовать через callback в JS тут неприменим. Направьте пожалуйста в нужно направлении, спасибо.


Ответы (1 шт):

Автор решения: Regent

Подход с использованием callback-a применим. Можно, например, передать его в конструктор myOkHttpClient и сохранить в поле:

private final Consumer<Response> responseHandler;

public myOkHttpClient(Consumer<Response> responseHandler)
{
    this.responseHandler = responseHandler;
}

после чего вызвать в методе onResponse:

public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException
{
    responseHandler.accept(response);
}

Можно пойти и другим путём, особенно если нужно выполнять responseHandler в потоке, отличном от потока, в котором вызывается onResponse. Для этого в клиенте должен быть метод отправки запроса (sendRequest), а Call или Response должны уметь хранить контекст сделанного запроса

Если всё так, то можно в sendRequest генерировать id запроса (requestId), отдавать его в качестве результата вызова метода, а в onResponse складывать response в HashMap<Integer, Response> requestIdToResponse. Во внешнем же коде нужно будет периодически поллить клиент на предмет появления response-a по заданному requestId

→ Ссылка