私のアンドロイドでは、私は、HTTPクライアントを実装するためにレトロフィットを使用しています。
改造は可能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;
};
私はそれがどのように動作するかレトロフィットクライアントの構成や方法についてのすべてを理解しました。ユーザインタフェースではなく、通常のJavaクラスのJavaインタフェースである理由しかし、私は見ることができませんでしたか?
私は、一言で言えば、これはインターフェイスが何であるかであることを知っています:
インターフェースは、Javaの参照タイプです。それはクラスに似ています。これは、抽象メソッドのコレクションです。クラスは、それによってインタフェースの抽象メソッドを継承し、インターフェイスを実装します。抽象メソッドに加えて、インターフェースはまた、定数、デフォルトメソッド、静的メソッド、およびネストされたタイプが含まれていてもよいです。メソッド本体は、デフォルトメソッドと静的メソッドのために存在します。
インタフェースを書くことは、クラスを書くに似ています。しかし、このクラスは、オブジェクトの属性と動作を説明します。そして、インタフェースはクラスが実装その行動が含まれています。
インターフェースが抽象実装するクラスがない限り、インターフェースのニーズのすべてのメソッドは、クラスで定義されます。
私はまた、レトロフィットとのインタフェースの特定の役割を理解しています:
あなたはそれが各エンドポイント(URLへのリンクメソッド名を、GETまたはPOST、パラメータおよびパラメータの型、戻り値の型、についての情報(メソッド宣言、戻り値の型とのparams、注釈)を保持し、設定ファイルとしてインターフェイスを見ることができます。.. 。 もっと)。エンジンは、(必要な場合)のパラメータをシリアル化するために、これらの情報を使用しています(必要な場合)、要求を実行し、応答をデシリアライズ。
しかし、私はまだ自分自身に説明することはできませんインターフェースの代わりに、通常のJavaクラスを使用しますか?
あなたがソースコードを見てみ取る場合はレトロフィットライブラリーを、特にcreate()
方法Retrofit.java
クラス、あなたは彼らが使用していることがわかりますJavaの動的プロキシ、実行時にクラスを作成するアプローチを。
この機構は、特定の挙動を有するプロキシクラスを作成するために、インターフェース(またはインターフェースのリスト)を必要とします。これは、代わりに通常のJavaクラスのインタフェースを使用する理由を説明します。