2014-02-14 163 views
1

我有兩個不同的接口,它們採用相同的方法,但不實現或擴展對方。這兩個接口每個擴展了另一個類,它實現了接口方法更改類變量類型

然後我有一個類位於調用接口方法的獨立包中。

所以這個類有調用接口方法的方法,它們都是相同的。

public void doThis(){ 
    connection.doThis(); 
} 

public void doThat(){ 
    connection.doThat(); 
} 

public void doAnother(){ 
    connection.doAnother(); 
} 

現在,我想爲這兩個接口1和接口2變量連接工作。

我的想法是設置連接爲一個類變量

Object connection 

,然後去改變它輸入取決於條件接口1或接口2:

if(this){ 
//condition which converts connection to type interface1 
} 
else{ 
//condition which converts connection to type interface2 
} 

我怎麼做到這一點。我可以這樣做嗎?

我已經給出了一個無法更改的界面,但沒有實現遠程。但我的項目使用RMI。所以我在一個實現Remote的獨立包中創建了第二個接口。因此,兩個不同接口的原因是他做同樣的事情。

+0

爲什麼不使用泛型? –

+0

如果兩個接口都有完全相同的方法,那麼你不需要做任何事情,把引用類型保存爲'Interface1'或'Inteface2'。 –

+0

爲什麼每個實現類都有兩個相同的接口?很可能您只需要一個接口和兩個實現,在這種情況下,您可以讓您的成員變量爲該接口的類型。 – amalloy

回答

0

我認爲將包含方法'connection'的類公開爲容易,因爲它可以從所有包中訪問。

+0

這不是一個真正的答案 – user3308485

0

這似乎是一個非常奇怪的設置,但我不會問你。

如果您知道方法調用站點的條件(例如,條件是傳遞給方法的常量標誌),那麼可以使用泛型參數化該方法。例如:

public class TestGenerics { 
    public static interface A { 
     public void a(); 
    } 

    public static interface B { 
     public void a(); 
    } 

    public static class C implements A, B { 
     public void a() { 
      System.out.println("a"); 
     } 
    } 

    public static <T> T getCAsT() { 
     return (T) new C(); 
    } 

    public static void main(String[] args) { 
     A a = TestGenerics.<A>getCAsT(); 
     B b = TestGenerics.<B>getCAsT(); 
     a.a(); 
     b.a(); 
    } 
} 

否則,我會嘗試以某種方式合併兩個接口。

+0

**公共靜態類C實現A **。和**公共靜態類D實現B **。這是否會改變你的答案 – user3308485

+0

如果不同的類正在實現不同的接口,我不明白你想要做什麼。 'connection'是'C'還是'D'的實例? – Rotten194

+0

我想連接成爲接口1的一個實例,如果(this)...否則我想連接成爲interface2的一個實例 – user3308485