zoukankan      html  css  js  c++  java
  • Java遍历对象所有属性

    要获取对象的所有属性可以使用getDeclaredFields()
    方法会返回一个Field数组
    遍历这个数组几个遍历所有属性
    注意使用这个方法会抛出4个异常
    然后根据属性的类型选择执行对应的内容

    public static void eachProperties(Object model) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
        Field[] field = model.getClass().getDeclaredFields(); //获取实体类的所有属性,返回Field数组
        for(int j=0 ; j<field.length ; j++){ //遍历所有属性
            String name = field[j].getName(); //获取属性的名字
    
            System.out.println("attribute name:"+name);
            name = name.substring(0,1).toUpperCase()+name.substring(1); //将属性的首字符大写,方便构造get,set方法
            String type = field[j].getGenericType().toString(); //获取属性的类型
            if(type.equals("class java.lang.String")){ //如果type是类类型,则前面包含"class ",后面跟类名
              ...
            }
            if(type.equals("class java.lang.Integer")){
              ...
            }
            if(type.equals("class java.lang.Short")){
              ...
            }
            if(type.equals("class java.lang.Double")){
              ...
            }
            if(type.equals("class java.lang.Boolean")){
              ...
            }
            if(type.equals("class java.util.Date")){
              ...
            }
        }
    }
    

    具体执行的内容就是重点了
    我们知道模型的属性都会有对应的getter和setter方法
    只需要得到对应的getter和setter方法即可获取和设置属性
    这里就需要用到getMethod方法

    获得getter方法

    方法有分带参数和不带参数,我们知道getter方法是不带参数的
    获得getter方法如下

    Method m = model.getClass().getMethod("get"+name);
    

    获得setter方法

    如果是带参数的setter方法,就应该把参数的类型做封装成一个Class<?>泛型数组传入getMethod方法的第二个参数
    例如参数是String类型的setter方法如下

    Method m = model.getClass().getMethod("set"+name, new Class[] {String.class});
    

    执行getter方法

    String value = (String) m.invoke(model);
    

    执行setter方法

    m.invoke(model,new Object[] {new String("new value")});

    from: http://zhenhappy.github.io/2015/10/26/Java/Java-Each-Properties/
  • 相关阅读:
    【BZOJ-4423】Bytehattan 并查集 + 平面图转对偶图
    【BZOJ-2251】外星联络 后缀数组 + 暴力
    【BZOJ-1046】上升序列 DP + 贪心
    【BZOJ-3667】Rabin_Miller算法 随机化判素数
    【BZOJ-4173】数学 欧拉函数 + 关于余数的变换
    【BZOJ-1692&1640】队列变换 后缀数组 + 贪心
    【BZOJ-1857】传送带 三分套三分
    【BZOJ-1717】Milk Patterns产奶的模式 后缀数组
    【训练记录】后缀数组
    【BZOJ-1031】字符加密Cipher 后缀数组
  • 原文地址:https://www.cnblogs.com/GarfieldEr007/p/7056817.html
Copyright © 2011-2022 走看看