次の点を考慮してください。
public class Doer {
public static void doStuff(A a) {
System.out.println("a");
}
public static void doStuff(B b) {
System.out.println("b");
}
}
B が A を拡張する場所
そして、このようなジェネリック クラス:
public class NewClass<T extends A> {
public void doSomething(T entity) {
Doer.doStuff(entity);
}
}
このメソッドを次のように呼び出すと、「a」が出力されます
new NewClass<B>().doSomething(new B());
"b" を印刷するにはどうすればよいですか?
前もって感謝します
編集:汚い解決策は変更することです
Doer.doStuff(entity);
に
if(entity instanceof B){
Doer.doStuff((B) entity);
}else {
Doer.doStuff(entity);
}
しかし、instanceof を使用しないソリューションを探しているので、A を拡張する新しいクラスを作成するときに、追加の if (C instance of A) ... を NewClass に追加する必要はありません。