Java 反射 getDeclareFields getModifiers setAccessible(true)
Posted on 2016-05-27 15:05 Anhw 阅读(885) 评论(0) 收藏 举报示例代码:
public static Map<String, Object> dtoToMap(Object obj, String pre,
            String las) {
        Map result = new HashMap();
        Class clazz = obj.getClass();
        Field[] fs = clazz.getDeclaredFields();
        for (int i = 0; i < fs.length; i += 1) {
            if (Modifier.isStatic(fs[i].getModifiers())) {
                continue;
            }
            fs[i].setAccessible(true);
            try {
                Object value = fs[i].get(obj);
                
                if (value != null) {
                    result.put(pre + fs[i].getName() + las, value);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return result;
    }
方法解释:
通过反射获取obj的属性并对其拼接前缀和后缀
getClass:获取obj对象
getDeclaredFields() 
          返回 Field 对象的一个数组,这些对象反映此 Class 
对象所表示的类或接口所声明的所有字段。获得某个类的所有申明的字段,即包括public、private和proteced,但是不包括父类的申明字段。 
    getDeclaredField()
getFields()
得某个类的所有的公共(public)的字段,包括父类。
getConstructors()和getDeclaredConstructors(),getMethods()和getDeclaredMethods()。
类似上面所讲。
public Method getDeclaredMethod(String name, Class<?>... parameterTypes)
        name - 方法名
- parameterTypes- 参数数组
Modifier.isStatic(fs[i].getModifiers())
判断获取的Class属性是否是静态 修饰符
类似的还有public、private、protected
continue
跳出continue所属代码块,继续执行下面的代码
break
不继续执行break之后的代码块,跳到和break所在代码块相关的外层代码块开始执行。
fs[i].setAccessible(true);
true或false决定是否可以访问获取的数组里面的属性值
fs[i].getName()
获取数组中得到的属性的名字
 
                    
                     
                    
                 
                    
                 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号