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

一个表格有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中,遍历结束后返回结果

  1.   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;

}

 

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

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

posted on 2019-02-26 22:26 一马平川1 阅读() 评论() 编辑 收藏
版权声明:本文为wangxuejian原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/wangxuejian/p/10440651.html