Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的最佳实践是创建自己的接口,而不是改型中的现有接口_Java_Android_Interface_Retrofit - Fatal编程技术网

java中的最佳实践是创建自己的接口,而不是改型中的现有接口

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

我正在android应用程序中构建网络结构,我意识到我要做的一件事是在我的requests类中创建自己的接口

我有这样的方法,例如:

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());
    }
}