我有一个具有某些一般行为的超类,用于下载名为MySuperclass的内容。此类具有用于进一步使用有效负载的回调接口。

public class MySuperclass {

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

    private MyDownloadListener listener;
    ...

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

}


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

public class MySubclassA extends MySuperclass{
    ...
}

public class MySubclassB extends MySuperclass{
    ...
}


当我尝试在第三类中使用两个子类时,就会发生冲突。我将不得不做类似的事情

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


在您的超级班上:

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){
            ...
        }
    }
}

08-25 19:05