У меня есть общий тип класса, T следующим образом:Java общие интерфейсы
class MyClass<T>
Также я знаю, что T является интерфейс только с одним методом внутри, но я не знаю, что интерфейс, я не могу написать это :
class MyClass< T extends TheInterface >
Так есть способ вызвать этот метод?
public void callMe(T me, Object...params){
// How can I invoke T interface method?
}
Я пытался это:
public void callMe(T me, Object... params) {
// methods.length is 244, just as in my activity class
Method[] methods = me.getClass().getMethods();
try {
methods[0].invoke(me, params);
} catch (IllegalArgumentException e) {
e.printStackTrace();
return;
} catch (IllegalAccessException e) {
e.printStackTrace();
return;
} catch (InvocationTargetException e) {
e.printStackTrace();
return;
}
}
Но это не работает
Edit: Я отправил новый question, что объясняет, почему мне это нужно для
Что не работает г? Сообщение об ошибке – RNJ
Не имея возможности заранее знать, какой интерфейс (или супер интерфейс) вы получите, звучит очень похоже на проблему в дизайне. Опираясь на размышления, чтобы назвать метод, редко бывает хорошей стратегией. Мой личный опыт подсказывает, что вы должны найти способ улучшить дизайн (возможно, используйте шаблон [Adapter pattern] (http://en.wikipedia.org/wiki/Adapter_pattern)) вместо того, чтобы пытаться вызвать метод, который вы не используете даже знать имя во время выполнения. – Laf