Java map属性注入生成对象
package com.youlingdada.utils;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Map;
public abstract class Convert<T> {
private Class<T> getRealClassType(){
Type type = getClass().getGenericSuperclass();
ParameterizedType parameterizedType = (ParameterizedType) type;;
return (Class<T>) parameterizedType.getActualTypeArguments()[0];
}
public T mapConvertObject(Map<String, Object> map) {
try {
Class<T> targetClass = getRealClassType();
T instance = targetClass.newInstance();
Field[] fields = targetClass.getDeclaredFields();
for (Field field : fields) {
String fieldName = field.getName();
field.setAccessible(true);
if (map.containsKey(fieldName)){
field.set(instance, map.get(fieldName));
}
}
return instance;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public T mapConvertObject(Map<String, Object> map, Class<T> targetClass){
try {
T instance = targetClass.newInstance();
Field[] fields = targetClass.getDeclaredFields();
for (Field field : fields) {
String fieldName = field.getName();
field.setAccessible(true);
Object o = map.get(fieldName);
field.set(instance, o);
}
return instance;
} catch (InstantiationException | IllegalAccessException e) {
throw new RuntimeException(e);
}
}
}
package com.youlingdada.utils.entity;
import com.youlingdada.utils.Convert;
public class User extends Convert<User> {
private String uId;
private String username;
private String password;
@Override
public String toString() {
return "User{" +
"uId='" + uId + ''' +
", username='" + username + ''' +
", password='" + password + ''' +
'}';
}
}