从继承自同一超类的多个 类 实现回调接口时发生冲突
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,这里称为 MySubclassA
和 MySubclassB
。
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){
...
}
}
}
我有一个 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,这里称为 MySubclassA
和 MySubclassB
。
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){
...
}
}
}