【问题标题】:Conflict when implementing callback interfaces from multiple classes that inherit from same superclass从继承自同一个超类的多个类实现回调接口时发生冲突
【发布时间】:2015-08-25 10:11:59
【问题描述】:

我有一个超类,它具有一些用于下载名为MySuperclass 的东西的通用行为。这个类有一个回调接口,用于进一步使用payload。

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
    }

}

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

【问题讨论】:

  • 乍一看,我会创建两个内部类,每个实现一个回调接口,而不是让(外部)类本身实现它们。
  • @Fildor 乍一看,这对我来说是行不通的。
  • 您能告诉我们为什么它不适用于您的情况吗?
  • @Fildor 乍一看,我想我明白你的建议。我需要仔细看看这个。但这似乎仍然不方便。有人可能认为我的问题在Java 中很常见。

标签: java inheritance interface callback


【解决方案1】:

最快的解决方案:提供一个调用你的回调接口的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){
            ...
        }
    }
}

【讨论】:

  • 不错的解决方案。为我工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
  • 2019-08-04
  • 1970-01-01
  • 2013-08-12
  • 2011-11-03
  • 1970-01-01
  • 2018-05-28
相关资源
最近更新 更多