同じ入力パラメーターの型と同じ戻り値の型 (ただし名前は異なる) を持つ2 つのクラスA
とB
そのようなメソッドがあり、それぞれメソッドをB extends A
実装しているとします。タイプorのオブジェクトを入力として取得するメソッドで、オブジェクトがタイプである場合、またはオブジェクトがタイプである場合に呼び出したいと思います。getA
getB
public static <T extends A> void print(T t)
A
B
getA
A
getB
B
A
とのコードを編集できれば、 (との実装では、それぞれ getA() と getB() を呼び出す) を提供B
するインターフェイスを実装し、からこのメソッドを呼び出します。問題は、クラス A と B が変更できないことです! . メソッドを追加または変更することはできず、それらのクラス階層は固定されており、私はそれらのコードを記述しておらず、ソースにアクセスすることもできません。I
getValue()
A
B
getValue()
print()
A
これは、何らかの理由でとのコードを変更したくない場合にも適用されることに注意してください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";
}
}
}