• 反射


    •  获取Class类
        //获取Class类
       //(方法一)
       Class class1 = UserBean.class;
       //(方法二)
      Class class2 = new UserBean().getClass();
       //(方法三)
       Class class3 = Class.forName("cn.xxx.domain.UserBean");
    •  利用反射封装JavaBean数据
      /**
           * 封装JavaBean数据
           *
           * @param t
           * @param m
           * @param <T>
           * @throws IllegalAccessException
           * @throws InstantiationException
           */
          private <T> T getBean(T t, Map<String, String[]> m) throws IllegalAccessException, InstantiationException {
              //记录存储数据的属性名
              ArrayList<String> names = new ArrayList();
              //获取Class类
              Class c = (Class) t;
              //获取Class类的父类
              Class cParent = c.getSuperclass();
              //实例类
              T cParentIn = (T) c.newInstance();
              Set<Map.Entry<String, String[]>> entries = m.entrySet();
              Iterator<Map.Entry<String, String[]>> iterator = entries.iterator();
              //获取全部字段,包括私有字段
              Field[] declaredFields = cParent.getDeclaredFields();
              //
              while (iterator.hasNext()) {
                  Map.Entry<String, String[]> next = iterator.next();
                  String[] strs = next.getValue();
                  for (Field field : declaredFields) {
                      if (next.getKey().equals(field.getName())) {
                          //设置私有对象可以访问
                          field.setAccessible(true);
                          String name = next.getKey();
                          String value = strs[0];
                          try {
                              //获取属性,name为参数名
                              Field declaredField = cParent.getDeclaredField(name);
                              //设置私有对象可以访问
                              declaredField.setAccessible(true);
                              //一定要子类实例,不然没有办法访问父类私有属性,cParentIn是类的实例
                              declaredField.set(cParentIn, value);
                              names.add(name);
                          } catch (NoSuchFieldException e) {
                              e.printStackTrace();
                          }
      
                          break;
                      }
                  }
              }
      
              //获取类中参数的值
              //方法一:
              for (Field field : declaredFields) {
                  field.setAccessible(true);
                  String name = field.getName();
                  try {
                      Field declaredField = cParent.getDeclaredField(name);
                      if (declaredField != null) {
                          declaredField.setAccessible(true);
                          //一定要判断,不然当属性值为空就会报错
                          if (declaredField.get(cParentIn) != null) {
                              //获取参数
                              String value = declaredField.get(cParentIn).toString();
                              System.out.println("key=" + name + ",value=" + value);
                          }
                      }
      
                  } catch (NoSuchFieldException e) {
                      e.printStackTrace();
                  }
              }
      
              //方法二
              try {
                  for (String name : names) {
                      Field declaredField = cParent.getDeclaredField(name);
                      declaredField.setAccessible(true);
                      String value = declaredField.get(cParentIn).toString();
                      System.out.println("key=" + name + ",value=" + value);
                  }
              } catch (NoSuchFieldException e) {
                  e.printStackTrace();
              }
      
              return cParentIn;
          }
  • 相关阅读:
    js 基础(面试前必看)
    typescript 使用的几种情况
    flutter 命令卡主的问题
    React 通过注释自动生成文档
    jest 测试入门(一)
    react hooks 全面转换攻略(三) 全局存储解决方案
    缓存穿透、击穿、雪崩区别和解决方案
    java8 lambda表达式
    maven中snapshot快照库和release发布库的区别和作用
    初识 Nacos 以及安装
  • 原文地址:https://www.cnblogs.com/fatRabbit-/p/10165654.html
Copyright © 2020-2023  润新知