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