У меня есть метод с подписью public void setFoo(int newFoo)
в модели, которую я пишу.Я использую следующий код для вызова изнутри моего контроллера:
protected void setModelProperty(String propertyName, Object newValue) {
for (AbstractModel model: registeredModels) {
try {
Method method = model.getClass().
getMethod("set"+propertyName, new Class[] {
newValue.getClass()
}
);
method.invoke(model, newValue);
} catch (Exception ex) {
// Handle exception.
System.err.println(ex.toString());
}
}
}
Вызов этого метода наподобие controller.setModelProperty("Foo",5);
приводит к исключению: java.lang.NoSuchMethodException: foo.bar.models.FooModel.setFoo(java.lang.Integer)
- похоже на int
упаковывается как Integer
, что не соответствует сигнатуре setFoo.
Есть ли способ убедить этот код отражения передать 5
(или что-то еще, что я передаю) как целое число, без бокса?Или мне нужно создать public void setFoo(Integer newFoo)
в моей модели и явно распаковать, а затем вызвать оригинальный setFoo?