zoukankan      html  css  js  c++  java
  • 一个反射的妙用案例

    今天在工作中遇到一种场景:

    一个表格有10个列,要求当点击某列列头时,下拉展示该列的所有数据

    解决的常规办法是根据传入的列参数值,判断是哪一列,使用switch()或者if-else判断过滤出哪一列的值

    但这个办法太臃肿,如果有100个字段,那这个分支选择就太大了

    所以采用反射,你传什么列名,我就给你调用什么列字段的get方法,从结果集中过滤出目标列数据

    思路:

    public List<String> getColumnList  (QueryVO vo){

      //首先判断传入的代表列名的colName不能为空,因为为空就无法知道要过滤哪一列的值了

      String colName = vo.getColName();

      if(StringUtil.isNullOrEmpty(colName)){

        throw new IsNullException("参数为空!");

      }

      //将传入的列名首字母变成大写,便于后续拼接getXxx方法

      colName = colName.subString(0,1).toUpperCase() + colName.subString(1);

      //查询数据库

       List<ResultVO> users= demoDao.findListByVO(vo);

      //采用反射过滤数据:首先获取列对应的那个get方法,然后反射调用invoke,最后将获得的数据装入新list中,遍历结束后返回结果

      List<String> list = new ArrayList<String>();
      Method method = User.class.getMethod("get" + vo.getColName(), Object.class);
      for(User user : users){
      String value = (String)method.invoke(user, new Object());
      list.add(value);
      }
      return list;

    }

    //总结:该案例的本质是通过拼接方法名称来实现对方法的调用,但实现起来却是靠反射.

    使用低层方法也许能非常方便的解决一些烦扰的问题

  • 相关阅读:
    Server SQL Modes
    Java 8 New Features
    Spring Boot 企业级应用开发实战 刘伟东-2018年3月第一版
    一步一步学Spring Boot 2 微服务项目实战
    Springboot揭秘-快速构建微服务体系-王福强-2016年5月第一次印刷
    深圳宝安图书馆官网错误 HTTP Status 500
    Springboot
    linux 操作 mysql 指定端口登录 以及启动 停止
    PHP 基础
    Magento 总结
  • 原文地址:https://www.cnblogs.com/wangxuejian/p/10440651.html
Copyright © 2011-2022 走看看