有任何方法可以制作两个对象"兄弟姐妹"没有父母? [JAVA]

时间:2014-03-21 17:24:41

标签: java

好吧,也许我在这里总是胡说八道,但这是交易。

我有两个来自不同库的Java clases A和B,看起来像是

public class A {
method1()
}

public class B {
method1()
method2()
}

后来,我想要像

这样的东西
if (condition)
temp = new A()
else
temp = new B()

所以后来我可以使用

temp.method1() 

不考虑其A或B

我想如果A和B继承父C,这很容易,但事实并非如此,我也无法改变它......

所以...有一种优雅的方法来解决这个问题吗?

我将两个对象都映射到第三个,但我发现它很麻烦。所以...任何想法?

6 个答案:

答案 0 :(得分:4)

我会考虑制作包装界面&基类周围的类。

例如make interface Method1 { method1(); }然后make:

class AMethod1 implements Method1 { 
  A a; 
  method1() { a.method1(); } 
}

使用适当的构造函数&什么不是。

答案 1 :(得分:3)

您可以尝试扩展这两个类,然后您可以完全控制它们,然后使它们实现单个接口

答案 2 :(得分:1)

您可以尝试@Jigar Joshi提供的答案,也可以代替对这些类进行扩展,您可以为它们编写包装器来实现相同的接口。

答案 3 :(得分:0)

检查Adapter模式。这允许您使不兼容的接口兼容。

使用适配器模式,您不会超出类。相反,您编写了一个实现接口的新类,并将调用转发(委托)给真实对象。

答案 4 :(得分:0)

您可以使用反射。

public static void invokeMethod1(Object o) throws Exception {       
    o.getClass().getDeclaredMethod("method1").invoke(o);
}

答案 5 :(得分:0)

 public class Wrapper {

  public Wrapper(A a)    
  {  this.a = a }

  public Wrapper(B b)    
  {  this.b = b }

  public void method1()
  {
    if(a == null)
      b.method1();
    else
      a.method1();
  }
 }

有点蛮力,但它会起作用。