时间匆匆,一晃就到了十一月份了,忙里偷闲的来到了这里!
接下来和大家分享一些关于反射的小知识。
1、创建一个实体类Cat
package cn.java.reflect;
public class Cat {
private String name;
private Integer age;
private float weight;
public Cat() {
super();
}
public Cat(String name, Integer age, float weight) {
super();
this.name = name;
this.age = age;
this.weight = weight;
}
@Override
public String toString() {
return "Cat [name=" + name + ", age=" + age + ", weight=" + weight + "]";
}
}
2、工具类MapAndBeanUtils
package cn.java.reflect;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
public class MapAndBeanUtils {
/**
* 传递任意一个bean对象,将此对象中的全部属性封装到map中
* @throws Exception
*/
@SuppressWarnings("rawtypes")
public static Map<String,Object> beanToMap(Object bean) throws Exception{
if(bean == null){
return null;
}
Map<String,Object> resultMap = new HashMap<String,Object>();
//1、获取bean字节码文件
Class beanClass = bean.getClass();
//2、通过字节码文件获取bean中所有字段
Field[] fields = beanClass.getDeclaredFields();
//3、分别取出字段的字段名和字段值(字段名作为key,字段值作为value)
for (Field field : fields) {
field.setAccessible(true);//如果某一属性被private修饰,需要通过暴力反射来获取
String fieldName = field.getName();//bean中的某一属性名
Object fieldValue = field.get(bean);//bean中的某一属性值
resultMap.put(fieldName, fieldValue);
}
return resultMap;
}
/**
* 传递一个没有属性值的bean对象,传递一个有数据的map,将map中的数据保存到bean中
* @throws Exception
*/
@SuppressWarnings("rawtypes")
public static Object mapToBean(Map<String,Object> map,Object bean) throws Exception{
try {
if(map == null || bean == null){
return null;
}
//1、获取bean对象的字节码文件
Class beanClass = bean.getClass();
for (Map.Entry<String, Object> entry : map.entrySet()) {
//2、获取key=value的数据记录
String key = entry.getKey();
Object value = entry.getValue();
//3、通过字节码、key获取相应的Field对象
Field field = beanClass.getDeclaredField(key);
field.setAccessible(true);
//4、将value值保存到bean对象的属性中
field.set(bean, value);
}
} catch (NoSuchFieldException e) {
System.out.println("map中的key与实体类中的属性名不匹配!");
}
return bean;
}
}
3、测试类reflectTest
package cn.java.reflect;
import java.util.HashMap;
import java.util.Map;
public class reflectTest {
public static void main(String[] args) throws Exception {
//测试bean转map
Cat cat = new Cat("tom",20,10);
Map<String, Object> map = MapAndBeanUtils.beanToMap(cat);
System.out.println(map);
//测试map转bean
Cat cat1 = new Cat();
Map<String,Object> hm = new HashMap<String,Object>();
hm.put("name", "tom");
hm.put("age", 30);
hm.put("weight", 20.5F);
MapAndBeanUtils.mapToBean(hm, cat1);
System.out.println(cat1);
}
}
欢迎大家留言,一起学习吧!