1.编写工具类BeanUtils,该类为核心类,这段代码是一个工具类,提供了一些静态方法来操作Java对象和Map。 接下来,有一个 `getBean` 方法,它接受一个 `Class` 类型的参数,并返回一个泛型对象。在方法内部,它使用反射来实例化一个对象,并返回该对象。 然后,有一个 `getMapArrayToString` 方法,它接受一个 `Map<String, String[]>` 类型的参数,并返回一个 `Map<String, String>` 类型的对象。该方法将遍历输入的 `map` 对象,将每个键值对中的字符串数组转换为以逗号分隔的字符串,并将结果存储在新的 `map1` 对象中。 接着,有一个重载的 `getBean` 方法,它接受一个 `Class` 类型和一个 `Map<String, String>` 类型的参数,并返回一个泛型对象。在方法内部,它使用反射实例化一个对象,并将 `map` 中的键值对应的属性值通过反射调用setter方法设置到对象中。 最后,有两个私有方法, `caseParam` 和 `getSetMethod` 。 `caseParam` 方法用于根据参数类型将字符串转换为对应的基本数据类型或 `String` 类型。 `getSetMethod` 方法用于获取指定属性名对应的setter方法。
package utils;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class BeanUtils {
public BeanUtils() {
}
public static <T> T getBean(Class<T> c) {
T t = null;
try {
t = c.getConstructor((Class[])null).newInstance();
return t;
} catch (InstantiationException var3) {
throw new RuntimeException(var3);
} catch (IllegalAccessException var4) {
throw new RuntimeException(var4);
} catch (InvocationTargetException var5) {
throw new RuntimeException(var5);
} catch (NoSuchMethodException var6) {
throw new RuntimeException(var6);
}
}
public static Map<String, String> getMapArrayToString(Map<String, String[]> map) {
Map<String, String> map1 = new HashMap();
Set<String> set = map.keySet();
Iterator<String> it = set.iterator();
while(it.hasNext()) {
String key = (String)it.next();
map1.put(key, String.join(",", (CharSequence[])map.get(key)));
}
return map1;
}
public static <T> T getBean(Class<T> objectClass, Map<String, String> map) {
T t = null;
try {
t = objectClass.getConstructor((Class[])null).newInstance();
Set<String> set = map.keySet();
Iterator<String> it = set.iterator();
while(it.hasNext()) {
String key = (String)it.next();
Method m = getSetMethod(key, objectClass);
String param = (String)map.get(key);
m.invoke(t, caseParam(param, m.getParameterTypes()[0]));
}
return t;
} catch (InstantiationException var8) {
throw new RuntimeException(var8);
} catch (IllegalAccessException var9) {
throw new RuntimeException(var9);
} catch (InvocationTargetException var10) {
throw new RuntimeException(var10);
} catch (NoSuchMethodException var11) {
throw new RuntimeException(var11);
}
}
private static Object caseParam(String param, Class<?> c) {
Object o = null;
switch (c.getName()) {
case "float":
o = Float.parseFloat(param);
break;
case "double":
o = Double.parseDouble(param);
break;
case "int":
o = Integer.parseInt(param);
break;
case "short":
o = Short.parseShort(param);
break;
case "byte":
o = Byte.parseByte(param);
break;
case "long":
o = Long.parseLong(param);
break;
case "boolean":
o = Boolean.parseBoolean(param);
break;
case "java.lang.String":
o = param;
break;
default:
System.out.println("不是基础数据类型");
}
return o;
}
private static <T> Method getSetMethod(String key, Class<T> objectClass) {
Method method = null;
Method[] var3 = objectClass.getMethods();
int var4 = var3.length;
for(int var5 = 0; var5 < var4; ++var5) {
Method method0 = var3[var5];
if (method0.getName().startsWith("set") && method0.getName().substring(3).toLowerCase().equals(key)) {
method = method0;
}
}
return method;
}
}
2.编写Main,输入学生信息,调用BeanUtils类,完成注入
import java.util.HashMap;
import java.util.Map;
import utils.BeanUtils;
public class Main {
public Main() {
}
public static void main(String[] args) {
Map<String, String> map = new HashMap();
map.put("id", "5");
map.put("name", "老王");
map.put("balance", "3.89");
Student student = (Student) BeanUtils.getBean(Student.class, map);
System.out.println(student);
}
}
3.运行结果