У меня есть этот сетевой модуль. Я хочу добавить модуль сети в статический метод ErrorUtils.Можно ли использовать кинжал в статическом методе?
@Module
public class NetworkModule {
private final String END_POINT = "https://www.myurl.com/";
@Provides
@Singleton
public OkHttpClient getOkHttpClient() {
OkHttpClient okHttpClient = builder.build();
return okHttpClient;
}
@Provides
@Singleton
public GsonConverterFactory getGsonConverterFactory() {
return GsonConverterFactory.create();
}
@Provides
@Singleton
public Retrofit getRetrofit(OkHttpClient okHttpClient, GsonConverterFactory gsonConverterFactory) {
return new Retrofit.Builder()
.baseUrl(END_POINT)
.client(okHttpClient)
.addConverterFactory(gsonConverterFactory)
.build();
}
@Provides
@Singleton
public RetrofitService getRetrofitService(Retrofit retrofit) {
return retrofit.create(RetrofitService.class);
}
И я хочу, чтобы внедрить этот модуль в статический метод как:
public class ErrorUtils {
@Inject
static Retrofit retrofit;
public static RestError parseError(Response<?> response) {
**//showing error while writing this line**
MyApplication.getComponent().inject(ErrorUtils.class);
Converter<ResponseBody, RestError> converter = retrofit.responseBodyConverter(RestError.class, new Annotation[0]);
RestError error;
try {
error = converter.convert(response.errorBody());
} catch (IOException e) {
return new RestError();
}
return error;
}
}
Как мы можем внедрить модуль в статический метод, любое предложение?
«Статические методы и переменные, как правило, представляют собой плохую идею» ... Что относительно общественного статического намерения getCallingIntent()? –
Я хочу получить доступ к объекту Gson, поэтому мне нужно создать новый экземпляр внутри метода или использовать простой синглтон со статическим методом getInstance() вместо Dagger ...? –
@LeoDroidcoder Проблема со статическими объектами (например, одиночные) называется глобальным состоянием. Это может сделать тестирование практически невозможным и может привести к большей путанице, чем необходимо, если вы можете читать и писать что-то из любого места. Представьте, что вы хотите десериализовать объект 'Date' по-разному в двух разных местах вашего приложения, но поделитесь одним и тем же экземпляром' Gson'. Хотя Gson - безобидный пример с небольшими побочными эффектами. –