2014-02-14 161 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