В моем Android я использую Retrofit для реализации http-клиента.
Retrofit использует интерфейсы для определения возможных операций http.
userInterface. java
UserInterface.java
public interface UserInterface {
// Retrofit callback
@POST("login")
Call<Integer> signin(@Body LoginActivity.UserInfo userInfo);
}
Этот пользовательский интерфейс затем используется для модификации в 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;
};
Я все понял о том, как настроить Retrofit Client и как он работает. Однако я не мог понять, почему userInterface является интерфейсом java вместо обычного java класса?
Я знаю, что в двух словах это интерфейс:
An интерфейс является ссылочным типом в Java. Это похоже на класс. Это коллекция абстрактных методов. Класс реализует интерфейс, тем самым наследуя абстрактные методы интерфейса. Наряду с абстрактными методами интерфейс может также содержать константы, методы по умолчанию, методы stati c и вложенные типы. Тела метода существуют только для методов по умолчанию и методов stati c.
Написание интерфейса похоже на написание класса. Но класс описывает атрибуты и поведение объекта. И интерфейс содержит поведения, которые реализует класс.
Если класс, реализующий интерфейс, не является абстрактным, все методы интерфейса должны быть определены в классе.
Я также понял особую роль интерфейса с Модификация:
Вы можете видеть интерфейс в виде файла конфигурации, он содержит информацию (объявление метода, тип возвращаемого значения и параметры, аннотации) о каждой конечной точке (связать имя метода с URL, GET или POST, параметры и типы параметров, тип возвращаемого значения, ... и многое другое). механизм использует эту информацию для сериализации параметров (при необходимости), выполнения запроса и десериализации ответа (при необходимости).
Однако я все еще не могу объяснить себе использование интерфейса вместо обычного java класса ?