Используя отражение, чтобы получить метод; параметры метода типов интерфейса не найдены
Может быть, я упускаю что-то простое здесь, но как мне получить метод, чей параметр является интерфейсом, использующим отражение.
В следующем случаеnewValue
будетList<String>
называетсяfoo
, Так я бы позвонилaddModelProperty("Bar", foo);
Но это работает только для меня, если я не использую интерфейс и использую толькоLinkedList<String> foo
, Как мне использовать интерфейс дляnewValue
и получить метод отmodel
который имеет интерфейс в качестве параметраaddBar(List<String> a0)
?
Вот более подробный пример. (на основании:Этот пример)
public class AbstractController {
public setModel(AbstractModel model) {
this.model = model;
}
protected void addModelProperty(String propertyName, Object newValue) {
try {
Method method = getMethod(model.getClass(), "add" + propertyName, newValue);
method.invoke(model, newValue);
} catch (NoSuchMethodException e) {
} catch (InvocationTargetException e) {
} catch (Exception e) {}
}
}
public class AbstractModel {
protected PropertyChangeSupport propertyChangeSupport;
protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
propertyChangeSupport.firePropertyChange(propertyName, oldValue, newValue);
}
}
public class Model extends AbstractModel {
public void addList(List<String> list) {
this.list.addAll(list);
}
}
public class Controller extends AbstractController {
public void addList(List<String> list) {
addModelProperty(list);
}
}
public void example() {
Model model = new Model();
Controller controller = new Controller();
List<String> list = new LinkedList<String>();
list.add("example");
// addList in the model is only found if LinkedList is used everywhere instead of List
controller.addList(list);
}