Java反射-简单的给Bean赋值和取值
由于项⽬的实际需要,所以利⽤java反射原理写了⼀个简单给bean赋值和取值通⽤的类,在此记录下⽅便⾃⼰⽇后⽤到,也为需要的兄弟提供个参考例⼦。⼯具类BeanRefUtil:
[java]
1. st;
2.
3. import flect.Field;
4. import flect.Method;
5. SimpleDateFormat;
6. import java.util.Date;
7. import java.util.HashMap;
8. import java.util.Locale;
9. import java.util.Map;
10.
11. /**
12.  * java bean 反射的⽅法
13.  */
14. public class BeanRefUtil {
15.
16.    /**
17.      * 取Bean的属性和值对应关系的MAP
18.      * @param bean
19.      * @return Map
20.      */
21.    public static Map<String, String> getFieldValueMap(Object bean) {
22.        Class<?> cls = Class();
23.        Map<String, String> valueMap = new HashMap<String, String>();
24.        // 取出bean⾥的所有⽅法
25.        Method[] methods = DeclaredMethods();
26.        Field[] fields = DeclaredFields();
27.
28.        for (Field field : fields) {
29.            try {
30.                String fieldType = Type().getSimpleName();
31.                String fieldGetName = Name());
32.                if (!checkGetMet(methods, fieldGetName)) {
33.                    continue;
34.                }
35.                Method fieldGetMet = cls
36.                        .getMethod(fieldGetName, new Class[] {});
37.                Object fieldVal = fieldGetMet.invoke(bean, new Object[] {});
38.                String result = null;
39.                if ("Date".equals(fieldType)) {
40.                    result = fmtDate((Date) fieldVal);
41.                } else {
42.                    if (null != fieldVal) {
43.                        result = String.valueOf(fieldVal);
44.                    }
45.                }
46.                valueMap.Name(), result);
47.            } catch (Exception e) {
48.                continue;
49.            }
50.        }
51.        return valueMap;
52.
53.    }
54.
55.    /**
56.      * set属性的值到Bean
57.      * @param bean
58.      * @param valMap
60.    public static void setFieldValue(Object bean, Map<String, String> valMap) {
61.        Class<?> cls = Class();
62.        // 取出bean⾥的所有⽅法
63.        Method[] methods = DeclaredMethods();
64.        Field[] fields = DeclaredFields();
65.
66.        for (Field field : fields) {
67.            try {
68.
69.                String fieldSetName = Name());
70.                if (!checkSetMet(methods, fieldSetName)) {
71.                    continue;
72.                }
73.                Method fieldSetMet = Method(fieldSetName, field
74.                        .getType());
75.                String value = (Name());
76.                if (null != value && !"".equals(value)) {
77.                    String fieldType = Type().getSimpleName();
78.                    if ("String".equals(fieldType)) {
79.                        fieldSetMet.invoke(bean, value);
80.                    } else if ("Date".equals(fieldType)) {
81.                        Date temp = parseDate(value);
82.                        fieldSetMet.invoke(bean, temp);
83.                    } else if ("Integer".equals(fieldType)
84.                            || "int".equals(fieldType)) {
85.                        Integer intval = Integer.parseInt(value);
86.                        fieldSetMet.invoke(bean, intval);
87.                    } else if ("Long".equalsIgnoreCase(fieldType)) {
88.                        Long temp = Long.parseLong(value);
89.                        fieldSetMet.invoke(bean, temp);
90.                    } else if ("Double".equalsIgnoreCase(fieldType)) {
91.                        Double temp = Double.parseDouble(value);
92.                        fieldSetMet.invoke(bean, temp);
93.                    } else if ("Boolean".equalsIgnoreCase(fieldType)) {
94.                        Boolean temp = Boolean.parseBoolean(value);
95.                        fieldSetMet.invoke(bean, temp);
96.                    } else {
97.                        System.out.println("not supper type" + fieldType);
98.                    }
99.                }
100.            } catch (Exception e) {
101.                continue;
102.            }
103.        }
104.
105.    }
106.
107.    /**
108.      * 格式化string为Date
109.      * @param datestr
110.      * @return date
111.      */
112.    public static Date parseDate(String datestr) {
113.        if (null == datestr || "".equals(datestr)) {
114.            return null;
115.        }
116.        try {
117.            String fmtstr = null;
118.            if (datestr.indexOf(':') > 0) {
119.                fmtstr = "yyyy-MM-dd HH:mm:ss";
120.            } else {
121.
122.                fmtstr = "yyyy-MM-dd";
123.            }
124.            SimpleDateFormat sdf = new SimpleDateFormat(fmtstr, Locale.UK);    125.            return sdf.parse(datestr);
126.        } catch (Exception e) {
129.    }
130.
131.    /**
132.      * ⽇期转化为String
133.      * @param date
134.      * @return date string
135.      */
136.    public static String fmtDate(Date date) {
137.        if (null == date) {
138.            return null;
139.        }
140.        try {
141.            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",    142.                    Locale.US);
143.            return sdf.format(date);
144.        } catch (Exception e) {
145.            return null;
146.        }
147.    }
148.
149.    /**
150.      * 判断是否存在某属性的 set⽅法
151.      * @param methods
152.      * @param fieldSetMet
153.      * @return boolean
154.      */
155.    public static boolean checkSetMet(Method[] methods, String fieldSetMet) {    156.        for (Method met : methods) {
157.            if (fieldSetMet.Name())) {
158.                return true;
159.            }
160.        }
161.        return false;
162.    }
163.
164.    /**
165.      * 判断是否存在某属性的 get⽅法
166.      * @param methods
167.      * @param fieldGetMet
168.      * @return boolean
169.      */
170.    public static boolean checkGetMet(Method[] methods, String fieldGetMet) {    171.        for (Method met : methods) {
172.            if (fieldGetMet.Name())) {
java valueof
173.                return true;
174.            }
175.        }
176.        return false;
177.    }
178.
179.    /**
180.      * 拼接某属性的 get⽅法
181.      * @param fieldName
182.      * @return String
183.      */
184.    public static String parGetName(String fieldName) {
185.        if (null == fieldName || "".equals(fieldName)) {
186.            return null;
187.        }
188.        return "get" + fieldName.substring(0, 1).toUpperCase()
189.                + fieldName.substring(1);
190.    }
191.
192.    /**
193.      * 拼接在某属性的 set⽅法
194.      * @param fieldName
197.    public static String parSetName(String fieldName) {    198.        if (null == fieldName || "".equals(fieldName)) {
199.            return null;
200.        }
201.        return "set" + fieldName.substring(0, 1).toUpperCase()    202.                + fieldName.substring(1);
203.    }
204.
205. }

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。