У меня есть два класса (А и В) с одинаковыми методами (Foo):Java: различные интерфейсы дженериков
public class A {
public String foo() {
return "A said foo";
}
}
public class B {
public String foo() {
return "B said foo";
}
}
Я хочу, чтобы сделать общий класс, который может вызывать этот метод. Но у меня есть две идеи, как сделать это во время выполнения и иметь не представления о времени компиляции:
проверку типа и приведение к А или Б.
Получ.
Мой пример родовое, который вызывает 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> {
...
}
Обратите внимание, что я не являюсь создателем классов «А» и «Б».
Действительно. Без интерфейса (или суперкласса) способ * только * сделать это будет через отражение, дженерики или нет. – 2010-12-07 09:14:09