public class A {
public String foo() {
return "A said foo";
}
}
public class B {
public String foo() {
return "B said foo";
}
}
このメソッドを呼び出せるジェネリッククラスを作りたいと思います。しかし、私は実行時にこれを行う方法が2つあり、コンパイル時間に関する考え方はありません。
型をチェックしてAまたはBにキャストします。
メソッドを取得します。
getMethodを呼び出すジェネリックの例:
public class Template<T> {
private T mT;
public Template(T t) {
mT = t;
}
public String bar() {
String result = "no result";
try {
Method m = mT.getClass().getMethod("foo", null);
result = (String)m.invoke(mT);
} catch (Exception e) {
result = e.toString();
e.printStackTrace();
}
return result;
}
}
別の方法がありますか? 私はこのようなものを探しています:
public class Template<T extends A | B> {
...
}
私はクラス "A"と "B"の作成者ではないことに注意してください。
実際。インタフェース(またはスーパークラス)がなければ、これを行うための*唯一の方法は、反射、ジェネリック、またはノーを経由します。 –