我正在編寫一個將由現有應用程序使用的Android API,我將稱其爲客戶端。有很多客戶端代碼,我不想修改它。現在API實現一個回調方法作爲接口。爲了節省我自己編寫大量的鍋爐代碼,我決定使用泛型和可擴展類。這個設計決定讓我的API的回調接口使用泛型。反過來,這導致編譯器將客戶端標記爲需要指定執行回調的類型參數。我不想讓客戶端必須使用類型參數。實際上,我想屏蔽客戶端代碼不必指定類型,並希望阻止客戶端指定錯誤的類型。如何從Callback接口的實現類中隱藏泛型類型參數
下面是一個例子:
可擴展API類的實施例來封裝基本的功能:
public class ExampleAPI extends BaseAPI<String> {
public ExampleAPI(Callback<String> callback) {
super(callback):
}
public String getResponse() {
String response = "blah";
return response;
}
}
實施例的客戶端代碼(這是:
延伸BaseAPIpublic 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 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 2012-03-19 04:05:17