好吧,也许我在这里总是胡说八道,但这是交易。
我有两个来自不同库的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,这很容易,但事实并非如此,我也无法改变它......
所以...有一种优雅的方法来解决这个问题吗?
我将两个对象都映射到第三个,但我发现它很麻烦。所以...任何想法?
答案 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();
}
}
有点蛮力,但它会起作用。