[英]Why does Retrofit use Interface instead of a normal java class?
在我的 Android 中,我使用 Retrofit 来实现一个 http 客户端。
Retrofit 使用接口来定义可能的 http 操作。
用户界面.java
UserInterface.java
public interface UserInterface {
// Retrofit callback
@POST("login")
Call<Integer> signin(@Body LoginActivity.UserInfo userInfo);
}
然后在 loginActivity.java 中改造使用这个 UserInterface:
登录活动.java
// It makes sense. Retrofit will use the interface as a configuration file
UserInterface userInterface = ApiClient.getApiClient().create(UserInterface.class);
客户端程序
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 类?
如果您查看Retrofit 库的源代码,特别是Retrofit.java
类的create()
方法,您会发现它们正在使用Java 的动态代理方法在运行时创建类。
这种机制需要一个接口(或接口列表)来创建具有特定行为的代理类。 这解释了为什么使用接口而不是普通的 java 类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.