简体   繁体   English

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

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

I have a superclass with some generic behavior for downloading stuff called MySuperclass . 我有一个具有某些一般行为的超类,用于下载名为MySuperclass东西。 This class has a callback interface for further use of the payload. 此类具有用于进一步使用有效载荷的回调接口。

public class MySuperclass {

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

    private MyDownloadListener listener;
    ...

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

}

I derive multiple classes from MySuperclass , here called MySubclassA and MySubclassB . 我从MySuperclass派生了多个类,这里​​称为MySubclassAMySubclassB

public class MySubclassA extends MySuperclass{
    ...
}

public class MySubclassB extends MySuperclass{
    ...
}

The conflict occurs when I try to use both subclasses in a third class. 当我尝试在第三类中使用两个子类时,就会发生冲突。 I would have to do something like 我将不得不做类似的事情

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

}

but this doesn't work because I can't distinguish between the two different callback interfaces. 但这是行不通的,因为我无法区分两个不同的回调接口。 How can I solve this? 我该如何解决?

The quickest solution: Provide a sender object which calls your callback interface: 最快的解决方案:提供一个调用您的回调接口的sender对象:

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

In your super class: 在您的超级班上:

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

In your listener object: 在您的侦听器对象中:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM