實現思路:
代碼:
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* @author liujunao
* @description 用於給 bean 賦值,避免繁瑣 setter
* 注意:只能對 String,Integer,Long,Double,Boolean 且 setter 方法首字母大寫對 bean 屬性賦值
*/
public class BeanSetterUtil {
/**
* 實現 bean 屬性賦值
*
* @param clazz
* @param value
* @param <T>
* @return
*/
public static <T> T create(Class<T> clazz, String value) {
//類中必須要有無參構造器
Object obj = null;
try {
obj = clazz.getDeclaredConstructor().newInstance();
} catch (Exception e) {
e.printStackTrace();
}
//設置屬性
setValue(obj, value);
return (T) obj;
}
/**
* 屬性賦值
*
* @param obj
* @param value
*/
private static void setValue(Object obj, String value) {
String[] str = value.split("\\|");//按照|拆分字符串
for (int i = 0; i < str.length; i++) {
String[] s = str[i].split(":");
//s[0]保存的是屬性名稱,s[1]保存的是屬性內容
try {
Field field = obj.getClass().getDeclaredField(s[0]);
Method method = obj.getClass().getDeclaredMethod("set" + initCap(s[0]), field.getType());
Object valueObj = convertAttributeValue(field.getType().getName(), s[1]);
if (valueObj != null) {
method.invoke(obj, valueObj);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 參數類型轉換
* 注意:只能處理基本類型 --> String,Integer,Long,Double,Boolean
*
* @param type
* @param value
* @return
*/
private static Object convertAttributeValue(String type, String value) {
if ("long".equals(type) || "java.lang.Long".equals(type)) {
return Long.parseLong(value);
} else if ("double".equals(type) || "java.lang.Double".equals(type)) {
return Double.parseDouble(value);
} else if ("String".equals(type) || "java.lang.String".equals(type)) {
return String.valueOf(value);
} else if ("int".equals(type) || "java.lang.Integer".equals(type)) {
return Integer.parseInt(value);
} else if ("boolean".equals(type) || "java.lang.Boolean".equals(type)) {
return Boolean.parseBoolean(value);
} else {
return null;
}
}
/**
* 首字母大寫
*
* @param str
* @return
*/
private static String initCap(String str) {
if (str == null || "".equals(str)) {
return str;
}
if (str.length() == 1) {
return str.toUpperCase();
} else {
return str.substring(0, 1).toUpperCase() + str.substring(1);
}
}
}