Можно ли вызвать метод, в котором объект аргумента или класс аргумента является подклассом, и сам метод взял суперкласс в качестве аргумента?Вызов getMethod с подклассом как аргумент метода
Я пытаюсь вызвать этот метод public void setNewProblem(Problem problem);
с конкретной реализацией абстрактного класса Проблема. К сожалению, я получаю исключение NoSuchMethodException
.
Я называю ВЫЗОВ так:
Method method = model.getClass().getMethod("set" + propertyName, new Class[] { newValue.getClass() });
method.invoke(model, newValue);
Если изменить newValue.getClass()
на Problem.class
все работает отлично. Любая идея, как передать подкласс public void setNewProblem(Problem problem);
?
Исключение не вызвано invoke(). Это вызвано getMethod(). Вам нужен фактический объявленный класс, чтобы найти метод в классе. Но при вызове метода вы можете передать любой экземпляр подкласса. Почти каждый раз, когда используется отражение, оно не должно. Вероятно, есть лучший способ добиться того, чего вы хотите, чем отражения. Чего вы хотите достичь? –
Да, исключение вызвано getMethod(), возможно, я был неясен там. Я использую [this] (http://www.oracle.com/technetwork/articles/javase/index-142890.html) реализацию MVC.В этой реализации контроллер использует invoke, чтобы сообщить модели, что изменилось в представлении. – hofmeister