Por que o Retrofit usar a interface em vez de uma classe java normal?

Ahmed Ghrib:

Na minha Android, estou usando Retrofit para implementar um cliente HTTP.
Utiliza interfaces de retrofit para definir as possíveis operações HTTP.

userInterface.java

UserInterface.java
public interface UserInterface {
   // Retrofit callback
   @POST("login")
   Call<Integer> signin(@Body LoginActivity.UserInfo userInfo);
}

Este UserInterface é então utilizada por retroajuste no loginActivity.java:

loginActivity.java

// It makes sense. Retrofit will use the interface as a configuration file
UserInterface userInterface = ApiClient.getApiClient().create(UserInterface.class);

ApiClient.java

public static Retrofit getApiClient(){
   if (retrofit==null){
       retrofit = new Retrofit.Builder().baseUrl(BASE_URL)
               .addConverterFactory(GsonConverterFactory.create())
               .build();
   }
   return retrofit;
};

Eu entendi tudo sobre como configuração Retrofit cliente e como ele funciona. No entanto, eu não podia ver por UserInterface é uma interface java em vez de uma classe java normal?
Eu sei que em poucas palavras é isso que uma interface é:

Uma interface é um tipo de referência em Java. É semelhante a classe. É uma coleção de métodos abstratos. A classe implementa uma interface, assim herdar os métodos sumário da interface. Junto com métodos abstratos, uma interface pode também conter constantes, métodos padrão, métodos estáticos e tipos aninhados. Existem organismos método somente para métodos padrão e os métodos estáticos.

Escrevendo uma interface é semelhante a escrever uma classe. Mas uma classe descreve os atributos e comportamentos de um objeto. E uma interface contém comportamentos que uma classe implementa.

A menos que a classe que implementa a interface é abstrata, todos os métodos da necessidade interface a ser definido na classe.

Eu também ter entendido o papel particular da interface com Reajuste:

Você pode ver a interface como um arquivo de configuração, que detém info (declaração de método, tipo de retorno e parâmetros, anotações) sobre cada endpoint (ligar um nome de método para url, GET ou POST, parâmetros e tipos de parâmetros, o retorno tipo de valor, .. . e mais). o motor usa as informações para parâmetros serialize (se necessário), executar o pedido e anular a resposta (se necessário).

No entanto, eu ainda não posso explicar a mim mesmo o uso de uma interface em vez de uma classe java normais ?

Lino:

Se você der uma olhada no código fonte da biblioteca de Retrofit , em particular o create()método de Retrofit.javaclasse, você pode ver que eles estão usando proxy dinâmico de Java abordagem para criar classes em tempo de execução.

Este mecanismo requer uma interface (ou uma lista de interfaces), a fim de criar classes de proxy que têm comportamento particular. Isso explica por que o uso de uma interface em vez de classe java normal.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=364250&siteId=1
Recomendado
Clasificación