使用 java 反射调用 setter 方法

2022-08-31 17:44:36

我需要使用反射调用类的 setter 方法,代码如下所示:

try {             
   Method method = myObj.getClass().getMethod("set" + fieldName, new Class[] { value.getClass() });               
   method.invoke(myObj, value);
     } catch (Exception ex) {
         ex.printStackTrace();
     }

是和 setter 方法如下:valueArrayList

public void setNames(List<String> names){
    this.names = names;
}

运行此代码时将引发 A,但当 setter 方法参数类型更改为 from 时,它将执行正常。有没有办法将 setter 方法参数保留在超类型中,并且在从类中获取方法时仍使用反射而不手动给出参数的类型?java.lang.NoSuchMethodExceptionArrayListList


答案 1

您可以使用BeanUtils

步骤 #1

Customer customer = new Customer();

步骤 #2

BeanUtils.setProperty(customer,"firstName","Paul Young");

您可以使用反射迭代所有类成员并相应地设置值,假设客户对象具有:

private String firstName;
// Getter and Setter are defined

答案 2

如果您碰巧使用spring框架,则可以使用PropertyAccessorFactory来检索ProperatAccessor接口的实现:

直接访问属性

PropertyAccessor myAccessor = PropertyAccessorFactory.forDirectFieldAccess(object);
// set the property directly, bypassing the mutator (if any)
myAccessor.setPropertyValue("someProperty", "some value");

通过访问器/赋值器访问属性

如果需要使用其 getter 和 setter 访问属性,则可以改用以下方法:forBeanPropertyAccess

PropertyAccessor myAccessor = PropertyAccessorFactory.forBeanPropertyAccess(object);
// a `setSomeProperty()` method will be used
myAccessor.setPropertyValue("someProperty", "some value");