一马平川1

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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

一个表格有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;

}

 

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

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

posted on 2019-02-26 22:26  一马平川1  阅读(170)  评论(0编辑  收藏  举报