java-Map和实体模型类的相互转化(运用反射)
程序员文章站
2022-06-15 12:09:02
...
实体模型类:
public class model {
private String Name1;
private String Name2;
private String Name3;
public model() {
super();
}
public model(String name1, String name2, String name3) {
super();
Name1 = name1;
Name2 = name2;
Name3 = name3;
}
@Override
public String toString() {
return "model [Name1=" + Name1 + ", Name2=" + Name2 + ", Name3="
+ Name3 + "]";
}
public String getName1() {
return Name1;
}
public void setName1(String name1) {
Name1 = name1;
}
public String getName2() {
return Name2;
}
public void setName2(String name2) {
Name2 = name2;
}
public String getName3() {
return Name3;
}
public void setName3(String name3) {
Name3 = name3;
}
}
实体类转map:
public class Map_ModelUtil {
/** 实体类转化成Map
* @param classModel
* @return
*/
public static Map ClassToMap( Object classModel) {
Object temp = classModel;
Map<Object,Object> map = new HashMap<Object, Object>();
Class<?> clz = temp.getClass();
Field[] fields = clz.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
try {
map.put(field.getName(), field.get(temp));//键值对为 属性名:属性值
} catch (Exception e) {
System.out.println("转换异常:" + e.getMessage());
}
}
return map;
}
}
测试:
public static void main(String[] args) {
model test = new model("value1","value2","value3");
System.out.println(Map_ModelUtil.ClassToMap(test));
}
结果:
{Name3=value3, Name2=value2, Name1=value1}
Map转实体类:
public class Map_ModelUtil {
/** map转化成实体类
* @param map
* @param classModel
* @return
*/
public static Object MapToClassp( Map map , Object classModel) {
Map<Object,Object> tempMap = map;
Object tempClass = classModel;
Class<?> clz = tempClass.getClass();
Field[] fields = clz.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
try {
if (tempMap.containsKey(field.getName())) { //如果map集合存在与属性名相同的键
field.set(tempClass, tempMap.get(field.getName())); //把属性值赋予给目标类对应属性
}
} catch (Exception e) {
System.out.println("转换异常:" + e.getMessage());
}
}
return tempClass;
}
}
测试:
public static void main(String[] args) {
Map<String,String> test = new HashMap<String, String>();
test.put("Name1", "value1");
test.put("Name2", "value2");
test.put("Name3", "value3");
System.out.println(Map_ModelUtil.MapToClassp(test, new model()).toString());
}
结果:
model [Name1=value1, Name2=value2, Name3=value3]
在系统的开发中,有时候我们需要把实体类的每一个属性名和值都拿出来,如果靠传统的get方法和手写的属性名,效率低而且复用性差,尤其是当出现一个模型有几十上百个属性字段时,一个一个写简直浪费时间,用这个转化,把实体类的属性名和属性值直接转化成键值对,方便遍历。
上一篇: java 实体类时间类型 自动转换格式