假设我有两个类A和B这样B extends A,分别实现方法getA并且getB具有相同的输入参数类型和相同的返回类型(但名称不同)。在将 or 类型的对象作为输入的方法中,如果对象是类型或public static <T extends A> void print(T t)对象是A类型,B我想调用。getAAgetBB
如果我可以编辑 and 的代码,A我B会让它们实现一个接口I提供(在andgetValue()的实现中,将分别调用 getA() 和 getB()),然后从. 问题是:A 类和 B 类不可修改!. 不能添加或更改任何方法,它们的类层次结构是固定的,我没有编写它们的代码,也无权访问源代码。ABgetValue()print()
请注意,这也适用于 - 出于任何原因 - 我不想更改Aand的代码的情况B。
有没有不使用的方法instanceof呢?
下面是一个使用instanceof(糟糕!)的解决方案。
public class Test {
public static <T extends A> void print(T t){
if (t instanceof B)
System.out.println(((B)t).getB());
else if (t instanceof A)
System.out.println(t.getA());
}
public static class A {
public String getA(){
return "A";
}
}
public static class B extends A {
public String getB(){
return "B";
}
}
}