時間匆匆,一晃就到了十一月份了,忙裏偷閒的來到了這裏!
接下來和大家分享一些關於反射的小知識。
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);
}
}
歡迎大家留言,一起學習吧!