/**
* 根据字段的名称查找字段的 get 方法: 先检查是否有不带参数的 getXxx() 方法,如果没有再检查是否有不带参数的 isXxx() 方法
* @param clazz 字段所在的类
* @param fieldName 字段名称
* @return 字段对应的 get 方法,如果没有对应的 get 方法,则返回null
*/
public static Method findGetMethod(Class> clazz, String fieldName) {
Field field = getField(clazz, fieldName);
if(field != null) {
return findGetMethod(clazz, field);
}
String getMethodSuffix = findGetAndSetSuffix(fieldName);
Method getMethod = findMethod(clazz, "get" + getMethodSuffix);
if (getMethod == null) { // boolean 类型字段的 get 方法为 isXxx() 的形式
getMethod = findMethod(clazz, "is" + getMethodSuffix);
}
return getMethod;
}
/**
* 查找字段的 get 方法: 先检查是否有不带参数的 getXxx() 方法,如果没有再检查是否有不带参数的 isXxx() 方法
* @param clazz 字段所在的类
* @param field 字段
* @return 字段对应的 get 方法,如果没有对应的 get 方法,则返回null
*/
public static Method findGetMethod(Class> clazz, Field field) {
String getMethodSuffix = findGetAndSetSuffix(field.getName());
Method getMethod = findMethod(clazz, "get" + getMethodSuffix);
if (getMethod == null && (field.getType() == boolean.class || field.getType() == Boolean.class)) {
// boolean 类型字段的 get 方法为 isXxx() 的形式
getMethod = findMethod(clazz, "is" + getMethodSuffix);
}
return getMethod;
}
/**
* 查找字段的 set 方法
* @param clazz 字段所在的类
* @param field 字段
* @return 字段对应的 set 方法,如果没有对应的 set 方法,则返回null
*/
public static Method findSetMethod(Class> clazz, Field field) {
return findMethod(clazz, "set" + findGetAndSetSuffix(field.getName()), field.getType());
}
/**
* 获取getter或者setter方法的后缀
* @param fieldName
* @return
*/
public static String findGetAndSetSuffix(String fieldName){
if(fieldName.length() == 1){
if(fieldName.toUpperCase().equals(fieldName)){ //如果只有一个字母,并且是大写
return fieldName;
}
}else{
String firstChar = fieldName.substring(0, 1);
if(firstChar.equals(firstChar.toUpperCase())){ //如果第一个字母是大写
return fieldName;
}
String secondChar = fieldName.substring(1, 2);
if(secondChar.equals(secondChar.toUpperCase())){ //如果第二个字母是大写
return fieldName;
}
}
return WordUtils.capitalize(fieldName);
}