zoukankan      html  css  js  c++  java
  • 有关java反射机制 小结

    111111111111

    Class<?> cls = Class.forName("包名.类名");

    Object o = cls.newInstance();

    222222222222

    //取得方法

    Method method = cls.getMethod("set"+StringUtil.makeFirstLetterUpperCase(key),Boolean.class);//这里的boolean也可以是其他类型比如:Integer看情况赋值

    333333333333333

    //执行方法
    method.invoke(o,val); //val是一个值,就是上面set方法的值

    444444444444444444444444

    //取得该类的所有方法

    Method[] ms = cls.getMethods();

    //取得其中一个方法的返回值类型

    String type = ms[0].getReturnType().getName();

    返回值类型:

    java.lang.Long
    java.lang.String

    java.util.Date

    java.lang.Double

    java.lang.Float

    int

    这里可以根据方法的名称找到对应的返回值,然后赋值给第二步的参数 这样就获得 第二步的方法

    55555555555555555555555555555555

    一个excel导入,使用反射列子(个人代码收藏)

    前端代码

    <script type="text/javascript">
    $(function(){
    //导入基础数据
    $("#importData").click(function() {
    var rq = $("#inpRq").val();
    var url = __ctx+'/zjdlbb/zjdlbb/zjdlbb/importDialog.ht';
    var conf=$.extend({},{dialogWidth:550 ,dialogHeight:200,help:0,status:0,scroll:0,center:1});
    var winArgs="dialogWidth="+conf.dialogWidth+"px;dialogHeight="+conf.dialogHeight
    +"px;help=" + conf.help +";status=" + conf.status +";scroll=" + conf.scroll +";center=" +conf.center;
    url=url.getNewUrl();
    /*KILLDIALOG*/
    DialogUtil.open({
    height:conf.dialogHeight,
    conf.dialogWidth,
    url: url,
    isResize: true,
    sucCall : function(rtn) {
    $.ligerDialog.success("导入成功", "", function(){
    window.location.reload();
    window.opener.refreshThis();
    });
    }
    });
    });
    });
    </script>

    <div class="group"><a class="link " id="importData" href="javascript:;">导入</a></div>

    后台代码

    @RequestMapping({ "importExcel" })
    @Action(description = "导入Excel弹窗")
    public void importExcel(MultipartHttpServletRequest request,
    HttpServletResponse response) throws Exception {
    String rq = request.getParameter("rq");
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    SimpleDateFormat sdfTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-M-d");
    MultipartFile fileLoad = request.getFile("xmlFile");
    ResultMessage resultMessage = null;
    try {
    String fileType = fileLoad.getOriginalFilename().substring(
    fileLoad.getOriginalFilename().lastIndexOf(".") + 1,
    fileLoad.getOriginalFilename().length());
    Workbook wb = null;
    if (fileType.equals("xls")) {
    wb = new HSSFWorkbook(fileLoad.getInputStream());
    } else if (fileType.equals("xlsx")) {
    wb = new XSSFWorkbook(fileLoad.getInputStream());
    } else {
    throw new Exception("读取的不是excel文件");
    }
    Sheet sheet = wb.getSheetAt(0);
    XSSFSheet s = null;
    HSSFCell cell0 = null;
    HSSFCell cell1 = null;
    Map<String, String> map = new HashMap<String, String>();

    //获得总列数
    int coloumNum=sheet.getRow(0).getPhysicalNumberOfCells();
    int rowNum=sheet.getLastRowNum();//获得总行数

    Class<?> cls = Class.forName("com.ytd.zjdlbb.model.zjdlbb.Zjdlbb");
    Method[] ms = cls.getMethods();
    List<Zjdlbb> list = new ArrayList<Zjdlbb>();
    Map<String,String> keyMap = this.getKey();
    //遍历每行数据,第一行0是标题
    for (int i = 1; i <= rowNum; i++) {
    Object o = cls.newInstance();
    //遍历每一列
    for (int j = 0; j < coloumNum; j++) {
    //获取列标题
    String title = sheet.getRow(0).getCell(j).getStringCellValue();
    /* if(title.endsWith(")")){
    title = title.substring(0,title.indexOf("("));
    }*/
    // log.info("title ============================="+title);
    //获取列的值
    String colVal = sheet.getRow(i).getCell(j).getStringCellValue();
    //查找对应实体类属性
    String key = keyMap.get(title);
    // log.info("key ============================="+key);
    if(StringUtil.isNotEmpty(key)){
    //遍历类的所有方法名
    for (int k = 0; k < ms.length; k++) {
    //获取get方法
    String tmp = "get"+StringUtil.makeFirstLetterUpperCase(key);
    //excel标题与类属性相同的时候
    if(tmp.equals(ms[k].getName())&&StringUtil.isNotEmpty(colVal)){
    String setType = ms[k].getReturnType().getName();
    // log.info("setType ============================="+setType);
    Method method = null;
    if("boolean".equals(setType)){
    method = cls.getMethod("set"+StringUtil.makeFirstLetterUpperCase(key),Boolean.class);
    method.invoke(o,colVal);
    }else if("java.lang.String".equals(setType)){
    method = cls.getMethod("set"+StringUtil.makeFirstLetterUpperCase(key),String.class);
    method.invoke(o,colVal);
    }else if("java.lang.Long".equals(setType)){
    method = cls.getMethod("set"+StringUtil.makeFirstLetterUpperCase(key),Long.class);
    method.invoke(o,Long.parseLong(colVal));
    }else if("int".equals(setType)){
    method = cls.getMethod("set"+StringUtil.makeFirstLetterUpperCase(key),Integer.class);
    method.invoke(o,Integer.parseInt(colVal));
    }else if("java.util.Date".equals(setType)){
    method = cls.getMethod("set"+StringUtil.makeFirstLetterUpperCase(key),Date.class);
    method.invoke(o,sdfTime.parse(colVal));
    }else if("java.lang.Double".equals(setType)){
    // log.info("hhhhhhh ===========oooooooooooooooooooo=================="+setType);
    method = cls.getMethod("set"+StringUtil.makeFirstLetterUpperCase(key),Double.class);
    method.invoke(o,Double.parseDouble(colVal));
    }else if("java.lang.Float".equals(setType)){
    method = cls.getMethod("set"+StringUtil.makeFirstLetterUpperCase(key),Float.class);
    method.invoke(o,Float.parseFloat(colVal));
    }
    }
    }
    }
    }
    list.add((Zjdlbb)o);
    }

    for(Zjdlbb entity:list){
    Long id=UniqueIdUtil.genId();
    entity.setId(id);
    zjdlbbService.add(entity);
    }

    String result = "导入数据成功";
    if (result.contains("成功")) {
    resultMessage = new ResultMessage(1, "导入成功!");
    } else {
    resultMessage = new ResultMessage(0, result);
    }
    writeResultMessage(response.getWriter(), resultMessage);
    } catch (Exception ex) {
    ex.printStackTrace();
    String str = MessageUtil.getMessage();
    ex.getLocalizedMessage();
    if (StringUtil.isNotEmpty(str)) {
    resultMessage = new ResultMessage(0, "导入失败请检查导入的Excel是否正确:"
    + str);
    response.getWriter().print(resultMessage);
    } else {
    String message = ExceptionUtil.getExceptionMessage(ex);
    resultMessage = new ResultMessage(0, "导入失败请检查导入的Excel是否正确");
    response.getWriter().print(resultMessage);
    }
    }
    }

  • 相关阅读:
    [ECNU 1624] 求交集多边形面积
    [转] Java之ACM速成
    [swustoj 191] 迷宫逃离
    [Swustoj 24] Max Area
    PICK定理模板
    [HDU 1007] Quoit Design
    [转] 最近点对距离问题
    [POJ 2184] Cow Exhibition
    SGU 144.Meeting
    SGU 143.Long Live the Queen(女王万岁)
  • 原文地址:https://www.cnblogs.com/rdchen/p/9543755.html
Copyright © 2011-2022 走看看