【问题标题】:Changing a class variables type更改类变量类型
【发布时间】:2014-02-14 11:45:28
【问题描述】:

我有两个不同的接口,它们使用相同的方法,但不实现或扩展彼此。这两个接口都由另一个实现接口方法的类扩展

然后我有一个类,它位于一个单独的包中,它调用接口方法。

所以类有方法调用接口的方法,都是一样的。

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

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

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

现在,我想让变量 connection 对 interface1 和 interface2 都有效。

我的想法是将连接设置为类变量

Object connection

然后根据条件将其类型更改为 interface1 或 interface2:

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

我该怎么做。我可以这样做吗?

我得到了一个无法更改的接口,但没有实现远程。但我的项目使用 RMI。所以我在一个单独的包中创建了第二个接口来实现远程。因此,两个不同的接口做同样的事情的原因。

【问题讨论】:

  • 为什么不使用泛型?
  • 如果两个接口有完全相同的方法,那么你不需要做任何事情,保持引用类型为Interface1Inteface2
  • 为什么有两个相同的接口,每个接口都有一个实现类?很可能您只想要一个具有两个实现的接口,在这种情况下,您可以让您的成员变量属于那个接口的类型。
  • 一个接口扩展远程,另一个接口。这不能改变
  • 您是否尝试过为这两个类提供一个通用接口?即使你不能修改一个类X,也许你可以扩展X,让新类也实现另一个类的接口。

标签: java


【解决方案1】:

我认为将包含方法“连接”的类公开会更容易,因为它可以从所有包中访问。

【讨论】:

  • 这不是一个真正的答案
【解决方案2】:

这似乎是一个非常奇怪的设置,但我不会质疑你。

如果您知道方法调用站点的条件(例如,条件是传递给方法的常量标志),则可以改为使用泛型参数化方法。例如:

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。这会改变你的答案吗
  • 如果不同的类实现不同的接口,我看不出你想做什么。 connectionCD 的实例吗?
  • 我希望连接成为接口 1 的实例 if(this)...否则我希望连接成为接口 2 的实例
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-23
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
相关资源
最近更新 更多