私はクライアントに呼び出す予定の既存のアプリケーションで使用されるAPIをAndroidで作成しています。多くのクライアントコードがあり、私は本当にそれを変更したくありません。現在、APIはインターフェイスとしてコールバックメソッドを実装しています。たくさんのボイラープレートコードを書くことから自分自身を救うために、私はジェネリックスと拡張可能なクラスを使うことにしました。この設計の決定は、私のAPIのコールバック・インターフェースがジェネリックを使用するようにすることです。これは、コールバックが実装されている型パラメータを指定する必要があるとクライアントにフラグを立てるようになります。クライアントに型パラメータを使用させたくありません。実際には、タイプを指定することからクライアントコードを保護し、クライアントが間違ったタイプを指定しないようにしたいと考えています。ここ一般的なタイプのパラメータを隠す方法コールバックインターフェイスのクラスを実装するから
は一例であり:拡張可能APIクラスの
例の基本的な機能をカプセル化する:BaseAPIを拡張
public abstract class BaseAPI<T> {
Callback mCallBack;
public BaseAPI(Callback<T> callback) {
mCallBack = callback;
}
public void doSomething() {
T response = getResponse();
if (mCallBack != null) {
mCallBack.onCallback(response)
}
}
public abstract T getResponse();
public interface Callback<T> {
public void onCallback(T response);
}
}
例クラス:
public class ExampleAPI extends BaseAPI<String> {
public ExampleAPI(Callback<String> callback) {
super(callback):
}
public String getResponse() {
String response = "blah";
return response;
}
}
例のクライアントコードは(これはどのように私はそれを見たい):
public class ClientView extends Activity implements Callback {
TextView mTextView;
onCreate() {
//pretend normal setup code is here
new ExampleAPI(this).doSomething();
}
onCallback(String response) {
mTextView.setText(response);
}
}
例のクライアントコード(これは、コンパイラはそれが見たいです):
public class ClientView extends Activity implements Callback<String> {
TextView mTextView;
onCreate() {
//pretend normal setup code is here
new ExampleAPI(this).doSomething();
}
onCallback(String response) {
mTextView.setText(response);
}
}
任意のアイデア?これは理にかなっていますか?
コンパイラのメッセージは、警告に過ぎません。今は無視してください。 – EJP