我需要使用反射来调用一个类的setter方法,代码如下:
try {
Method method = myObj.getClass().getMethod("set" + fieldName, new Class[] { value.getClass() });
method.invoke(myObj, value);
} catch (Exception ex) {
ex.printStackTrace();
}
value
是一个ArrayList
,setter方法如下:
public void setNames(List<String> names){
this.names = names;
}
运行此代码时抛出java.lang.NoSuchMethodException
,但是当setter方法参数类型从List
更改为ArrayList
它执行得很好。有没有办法在从类中获取方法时,将setter方法参数保持为父类(super class)型,并且仍然使用反射而不手动给出参数的类型?
最佳答案
如果你碰巧使用 spring 框架,你可以使用 PropertyAccessorFactory用于检索 PropertyAccessor 的实现界面:
直接访问属性
PropertyAccessor myAccessor = PropertyAccessorFactory.forDirectFieldAccess(object);
// set the property directly, bypassing the mutator (if any)
myAccessor.setPropertyValue("someProperty", "some value");
通过访问器/修改器访问属性
如果你需要使用它们的 getters 和 setters 来访问你的属性,你可以使用 forBeanPropertyAccess
方法来代替:
PropertyAccessor myAccessor = PropertyAccessorFactory.forBeanPropertyAccess(object);
// a `setSomeProperty()` method will be used
myAccessor.setPropertyValue("someProperty", "some value");
关于java - 使用java反射调用setter方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10009052/