zoukankan      html  css  js  c++  java
  • Java 反射 getDeclareFields getModifiers setAccessible(true)

    示例代码:

    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()

        获取数组中得到的属性的名字

  • 相关阅读:
    hdu 2066 一个人的旅行
    hdu 3790 最短路径问题(迪杰斯特拉)
    hdu 2544 最短路
    hdu 1548 A strange lift(迪杰斯特拉,邻接表)
    hdu 1035 Robot Motion
    hdu 1032 The 3n + 1 problem
    hdu 1031 Design T-Shirt
    hdu 1030 Delta-wave
    hdu1231(最大连续子序列)
    hdu1423(最长公共递增子序列)
  • 原文地址:https://www.cnblogs.com/xxlu/p/5534681.html
Copyright © 2011-2022 走看看