【发布时间】:2020-01-15 11:14:46
【问题描述】:
在我的 Android 中,我使用 Retrofit 来实现一个 http 客户端。
Retrofit 使用接口来定义可能的 http 操作。
userInterface.java
UserInterface.java
public interface UserInterface {
// Retrofit callback
@POST("login")
Call<Integer> signin(@Body LoginActivity.UserInfo userInfo);
}
这个 UserInterface 然后被 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 类?
我知道简而言之,这就是接口:
接口是 Java 中的引用类型。它类似于类。它是抽象方法的集合。一个类实现一个接口, 从而继承接口的抽象方法。沿着 对于抽象方法,接口也可以包含常量, 默认方法、静态方法和嵌套类型。方法体存在 仅适用于默认方法和静态方法。
编写接口类似于编写类。但是一堂课 描述对象的属性和行为。还有一个界面 包含类实现的行为。
除非实现接口的类是抽象的,否则所有的 接口的方法需要在类中定义。
我也理解了Retrofit接口的特殊作用:
您可以将接口视为配置文件,它包含信息 (方法声明,返回类型和参数,注释)关于每个 端点(将方法名称链接到 url、GET 或 POST、参数和 参数类型,返回值类型,...等等)。发动机使用 那些用于序列化参数的信息(如果需要),执行请求 并反序列化响应(如果需要)。
但是,我仍然无法向自己解释使用接口而不是普通的 java 类?
【问题讨论】:
标签: java android-studio interface retrofit retrofit2