2015-08-25 14 views
1

我有一個超類,有一些通用行爲用於下載名爲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 
    } 

} 

但這不起作用,因爲我無法區分兩個不同的回調接口。我該如何解決這個問題?

+0

乍一看,我會創建兩個內部類,每個實現一個Call後面的接口,而不是(外部)類本身實現它們。 – Fildor

+0

@Fildor乍一看,這不會在我的情況。 – kaolick

+0

[方法名稱碰撞在接口實現中可能的重複 - Java](http://stackoverflow.com/questions/2598009/method-name-collision-in-interface-implementation-java) – Fildor

回答

1

最快的解決辦法:提供發送對象,調用你的回調接口:

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

很好的解決方案。適用於我。 – kaolick

相關問題