有关java反射机制 小结

2021-07-13 01:06

阅读:690

标签:orm   str   put   相同   esc   array   标题   dex   ons   

 

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导入,使用反射列子(个人代码收藏)

前端代码

 

导入

后台代码

@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 map = new HashMap();

//获得总列数
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 list = new ArrayList();
Map keyMap = this.getKey();
//遍历每行数据,第一行0是标题
for (int i = 1; i Object o = cls.newInstance();
//遍历每一列
for (int j = 0; 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 //获取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);
}
}
}

 

有关java反射机制 小结

标签:orm   str   put   相同   esc   array   标题   dex   ons   

原文地址:https://www.cnblogs.com/rdchen/p/9543755.html


评论


亲,登录后才可以留言!