从继承自同一超类的多个 类 实现回调接口时发生冲突

Conflict when implementing callback interfaces from multiple classes that inherit from same superclass

我有一个 superclass,它具有一些通用行为,用于下载名为 MySuperclass 的内容。这个 class 有一个回调接口,可以进一步使用 payload。

public class MySuperclass {

    public interface MyDownloadListener{
        void onDownload(Object payload);
    }

    private MyDownloadListener listener;
    ...

    public void download(){
        ...
        listener.onDownloaded(response);
    }

}

我从 MySuperclass 派生了多个 class,这里称为 MySubclassAMySubclassB

public class MySubclassA extends MySuperclass{
    ...
}

public class MySubclassB extends MySuperclass{
    ...
}

当我尝试在第三个 class 中同时使用两个子 class 时,发生了冲突。我将不得不做类似

的事情
public class MyClass implements MySubclassA.MyDownloadListener, MySubclassB.MyDownloadListener{
    ...
    public void onDownloaded(Object payload){
        // here is the conflict
    }

}

但这不起作用,因为我无法区分这两个不同的回调接口。我该如何解决这个问题?

最快的解决方案:提供一个 sender 对象来调用您的回调接口:

public interface MyDownloadListener{
   void onDownload(Object payload, Object sender);
}

在你的超级class:

public class MySuperclass {
   ...
   public void download(){
      listener.onDownload(response, this);
   }
}

在您的侦听器对象中:

public class MyClass implements MySubclassA.MyDownloadListener, MySubclassB.MyDownloadListener{
    ...
    public void onDownload(Object payload, Object sender){
        if(sender instanceof MySubclassA){
            ...
        }
        if(sender instanceof MySubclassB){
            ...
        }
    }
}