Можно ли автоматически определять классы и генерировать типы для обобщений во время компиляции? - PullRequest
0 голосов
/ 27 мая 2018

Предположим, существует три класса MyClass1 , MyClass2 , MyClass3 , существующих в пакете com.my.package .В другом методе я пытаюсь создать экземпляр универсального типа, где каждый класс представляет тип обратного вызова ровно один раз:

    call.enqueue(new Callback<MyClass1>(){...});
    call.enqueue(new Callback<MyClass2>(){...});
    call.enqueue(new Callback<MyClass3>(){...});

Вместо того, чтобы вводить каждый класс вручную, я хочу добиться автоматического обнаруженияклассы в определенном пакете и впоследствии создают универсальный тип этого типа.

Эта функция желательна, потому что классы могут быть добавлены или удалены в com.my.package , и я не хочу менять код где-либо еще.Даже если у меня есть доступ к списку объектов java.lang.Class , я все равно не могу сгенерировать типы для универсальных объектов из объектов Class .Я знаю, что тип универсального не может быть объявлен во время выполнения (поэтому рефлексия отсутствует), однако, на мой взгляд, вся необходимая информация еще доступна во время компиляции.

Есть ли способ достичь этого?

(В моем приложении, в котором я работаю с Retrofit, Gson требуется конкретный тип POJO в угловых скобках для анализа данных JSON. Базовая модель довольно сложна и может измениться.)

1 Ответ

0 голосов
/ 27 мая 2018

Вы не должны создавать ответ в любом случае.Вы должны получить экземпляр ответа от API:

public class MyCallback<T> implements Callback<T> {

    @Override
    public void onResponse(Call<T> call, Response<T> response) {
        if (response.isSuccessful()) {
            T body = response.body(); // This is your response instance
        } else {
            // 404/500... error
        }
    }

    @Override
    public void onFailure(Call<T> call, Throwable t) {
        // fail
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...