java中的最佳实践是创建自己的接口,而不是改型中的现有接口
我正在android应用程序中构建网络结构,我意识到我要做的一件事是在我的requests类中创建自己的接口 我有这样的方法,例如:java中的最佳实践是创建自己的接口,而不是改型中的现有接口,java,android,interface,retrofit,Java,Android,Interface,Retrofit,我正在android应用程序中构建网络结构,我意识到我要做的一件事是在我的requests类中创建自己的接口 我有这样的方法,例如: public static void getUserData(String owner, final DataManager.OnDataReceived<Owner> listener) { Call<Owner> call = getGitService().getUser(owner); call.enqueue(ne
public static void getUserData(String owner, final DataManager.OnDataReceived<Owner> listener) {
Call<Owner> call = getGitService().getUser(owner);
call.enqueue(new Callback<Owner>() {
@Override
public void onResponse(Call<Owner> call, Response<Owner> response) {
}
@Override
public void onFailure(Call<Owner> call, Throwable t) {
}
});
}
现在所有的请求都是这样的:
public static void getUserData(String owner, final DataManager.OnDataReceived<Owner> listener) {
Call<Owner> call = getGitService().getUser(owner);
call.enqueue(new callbackHandler(listener));
}
及
和我的界面:
private static class callbackHandler implements Callback {
final DataManager.OnDataReceived listener;
callbackHandler(DataManager.OnDataReceived listener) {
this.listener = listener;
}
@Override
public void onResponse(Call call, Response response) {
listener.onDataReceived(response.body(), getErrorFromResponse(response));
}
@Override
public void onFailure(Call call, Throwable t) {
listener.onDataReceived(null, t.toString());
}
}
public interface OnDataReceived<T> {
void onDataReceived(T data, String error);
}
是未检查的分配…我理解这意味着什么,但不知道如何解决这个问题
更新:未经检查的问题的解决方案
你觉得这个解决方案怎么样
这就是所谓的。您正在将一个接口回调适配到另一个DataManager.OnDataReceived
如果您的目标是在将来能够用其他东西来替代改型,那么这种适配器是完全合理的。否则,您可能会考虑仅使用DATAMANGAG.OnDATA接收扩展回调,并将方法名称更改为匹配,例如OnDATA接收变成响应,以避免对该适配器的需要。
我理解这意味着什么,但不知道如何解决这个问题
callbackHandler实现回调,清除Java泛型
如果这仅用于所有者,则使用callbackHandler实现回调并使其保存DataManager.OnDataReceived。如果您计划将其用于多个模型对象(假设所有者是一个模型),请使用callbackHandler实现回调,并使其包含DataManager.OnDataReceived。谢谢……是的,这假设是泛型的,但编译器仍然不喜欢我的类,我在我的问题中添加了OnDataReceived
@Override
public void onResponse(Call call, Response response) {
listener.onDataReceived(response.body(), getErrorFromResponse(response));
}
@Override
public void onFailure(Call call, Throwable t) {
listener.onDataReceived(null, t.toString());
}
public interface OnDataReceived<T> {
void onDataReceived(T data, String error);
}
private static class callbackHandler<T> implements Callback<T> {
final DataManager.OnDataReceived<T> listener;
callbackHandler(DataManager.OnDataReceived<T> listener) {
this.listener = listener;
}
@Override
public void onResponse(Call<T> call, Response<T> response) {
listener.onDataReceived(response.body(), getErrorFromResponse(response));
}
@Override
public void onFailure(Call<T> call, Throwable t) {
listener.onDataReceived(null, t.toString());
}
}