运用场景是:我想通过 class 操作 obj 的 get/set util(通过属性名反射获取get和set方法)
原先对 getDeclaredMethod()方法理解不太详细,导致问题的出现。
那我们来看下方法的解释:
返回一个包含 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有声明方法,包括 public,protected,default(包)访问和私有方法,但不包括继承的方法。
问题就出现在此方法无法获取继承的方法,也就是说假如A继承B,那么getDeclaredMethod()方法,无法获取到B类中的方法,所以会导致java.lang.NoSuchMethodException异常的出现。
贴上代码:根据属性名称,拿到set方法,并把值set到对象中
public void setValue(Object obj, Class<?> clazz, String filedName, Class<?> typeClass, Object value) {
filedName = removeLine(filedName);
String methodName = "set" + filedName.substring(0, 1).toUpperCase() + filedName.substring(1);
try {
Method method = clazz.getDeclaredMethod(methodName, typeClass);
method.invoke(obj, getClassTypeValue(typeClass, value));
} catch (Exception ex) {
ex.printStackTrace();
}
}
想动态的去set数据到对应的字段中,因为A继承B,所以如果想要塞入B类中的字段,此时无法获取B类中的set方法,就导致报错java.lang.NoSuchMethodException异常出现。
若遇到此异常,建议首先检查下是否存在该方法。