请描述根据属性名调用属性的getter和setter方法获取和设置属性值的过程。
时间: 2024-02-25 07:59:08 浏览: 131
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
5星 · 资源好评率100%
当我们需要根据属性名来获取和设置属性值时,可以使用Java反射机制中的Method类和Field类。Method类代表类中的方法,Field类代表类中的属性。我们可以通过Class类的getMethod()、getMethods()、getDeclaredMethod()和getDeclaredMethods()方法获取Method对象;通过Class类的getField()、getFields()、getDeclaredField()和getDeclaredFields()方法获取Field对象。
对于getter方法,我们可以使用Method类的invoke()方法来调用,需要传入该属性所在对象的实例作为参数。代码示例如下:
```
public Object getPropValue(Object obj, String propName) throws Exception {
Class clazz = obj.getClass();
String methodName = "get" + propName.substring(0, 1).toUpperCase() + propName.substring(1);
Method method = clazz.getMethod(methodName, new Class[] {});
return method.invoke(obj, new Object[] {});
}
```
对于setter方法,我们需要先获取Field对象,然后使用Method类的invoke()方法来调用setter方法,需要传入该属性所在对象的实例和属性值作为参数。代码示例如下:
```
public void setPropValue(Object obj, String propName, Object value) throws Exception {
Class clazz = obj.getClass();
Field field = clazz.getDeclaredField(propName);
String methodName = "set" + propName.substring(0, 1).toUpperCase() + propName.substring(1);
Method method = clazz.getMethod(methodName, new Class[] { field.getType() });
method.invoke(obj, new Object[] { value });
}
```
需要注意的是,如果属性为private类型,需要先将其设置为可访问的。可以通过Field类的setAccessible()方法来实现。
阅读全文