Minha situação é a seguinte: trabalho em um aplicativo relativamente antigo e com muitas funcionalidades, desenvolvido no eclipse com pouquíssimas bibliotecas externas. Para facilitar o desenvolvimento de novas chamadas à API, estou implementando o Retrofit no projeto.
O grande problema é que adicionar dependências em um projeto feito no eclipse não é muito simples. Gostaria de colocar só as que fossem realmente necessárias. Com isso, ao invés de usar o dagger, criei uma classe singleton para retornar a instância do Retrofit e dos objetos que o utilizam.
No curso não ficou muito claro qual o real problema de fazer isso, se é só uma questão de legibilidade do código ou se de fato pode trazer algum problema.
Há de fato algo que torne a utilização de objetos estáticos prejudicial?
Abaixo exemplo dos códigos:
public class RetrofitModule {
private Retrofit retrofit;
private static RetrofitModule instance;
private RetrofitModule(){
// HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
// interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder()
//.addInterceptor(interceptor)
.readTimeout(15, TimeUnit.SECONDS)
.connectTimeout(15, TimeUnit.SECONDS)
.build();
retrofit = new Retrofit.Builder()
.baseUrl("https://minhaempresa.com.br/meuapp/api2/")
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
public static RetrofitModule getInstance(){
if(instance == null){
instance = new RetrofitModule();
}
return instance;
}
public Retrofit getRetrofit(){
return retrofit;
}
}
public class AbastecimentoModule {
private AbastecimentoService abastecimentoService;
private static AbastecimentoModule instance;
private AbastecimentoModule(){
Retrofit retrofit = RetrofitModule.getInstance().getRetrofit();
abastecimentoService = retrofit.create(AbastecimentoService.class);
}
public static AbastecimentoModule getInstance(){
if(instance == null){
instance = new AbastecimentoModule();
}
return instance;
}
public AbastecimentoService getAbastecimentoService(){
return abastecimentoService;
}
}