更改类变量类型
我有两个不同的接口,它们采用相同的方法,但不实现或扩展对方。这两个接口每个扩展了另一个类,它实现了接口方法更改类变量类型
然后我有一个类位于调用接口方法的独立包中。
所以这个类有调用接口方法的方法,它们都是相同的。
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的独立包中创建了第二个接口。因此,两个不同接口的原因是他做同样的事情。
这似乎是一个非常奇怪的设置,但我不会问你。
如果您知道方法调用站点的条件(例如,条件是传递给方法的常量标志),那么可以使用泛型参数化该方法。例如:
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();
}
}
否则,我会尝试以某种方式合并两个接口。
**公共静态类C实现A **。和**公共静态类D实现B **。这是否会改变你的答案 – user3308485
如果不同的类正在实现不同的接口,我不明白你想要做什么。 'connection'是'C'还是'D'的实例? – Rotten194
我想连接成为接口1的一个实例,如果(this)...否则我想连接成为interface2的一个实例 – user3308485
为什么不使用泛型? –
如果两个接口都有完全相同的方法,那么你不需要做任何事情,把引用类型保存为'Interface1'或'Inteface2'。 –
为什么每个实现类都有两个相同的接口?很可能您只需要一个接口和两个实现,在这种情况下,您可以让您的成员变量为该接口的类型。 – amalloy