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