在最近的项目中,在Coding阶段,发现很多代码冗余,代码质量很差,故此研究了一下java的反射,有什么错,请各位大神指出纠正
数据准备:
Person类
public class Person { private String sex; private String personId; public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getPersonId() { return personId; } public void setPersonId(String personId) { this.personId = personId; } }
Student类
public class Student extends Person { public String username; private int age; public Student() { // TODO Auto-generated constructor stub } private float chineseClz; private float physicalClz; private float englishClz; private float historyClz; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public float getChineseClz() { return chineseClz; } public void setChineseClz(float chineseClz) { this.chineseClz = chineseClz; } public float getPhysicalClz() { return physicalClz; } public void setPhysicalClz(float physicalClz) { this.physicalClz = physicalClz; } public float getEnglishClz() { return englishClz; } public void setEnglishClz(float englishClz) { this.englishClz = englishClz; } public float getHistoryClz() { return historyClz; } public void setHistoryClz(float historyClz) { this.historyClz = historyClz; } @SuppressWarnings("unused") private int getTotal(int a,int b,int c,int d){ return a+b+c+d; } @Override public String toString() { return "Student [username=" + username + ", age=" + age + ", chineseClz=" + chineseClz + ", physicalClz=" + physicalClz + ", englishClz=" + englishClz + ", historyClz=" + historyClz + "]"; } }
测试类(需要junit.jar)
import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class Test { /** * 获取该类所有的公开方法名 */ @org.junit.Test public void test(){ Class<Student> c=Student.class; //获取该class和该class父类所有的公开方法 Method[] methods=c.getMethods(); for(Method m:methods){ /*System.out.println(m);*/ System.out.println(m.toString()); } } /** * 获取该类所有的方法名包括[private] */ @org.junit.Test public void test1(){ Class<Student> c=Student.class; //获取该class的所有方法 Method[] methods=c.getDeclaredMethods(); for(Method m:methods){ /*System.out.println(m);*/ System.out.println(m.toString()); } } /** * 反射创建对象 * @throws IllegalAccessException * @throws InstantiationException */ @org.junit.Test public void test2() throws InstantiationException, IllegalAccessException{ Class<Student> c=Student.class; Student stu=(Student)c.newInstance(); stu.setUsername("Lyncc"); stu.setAge(11); System.out.println(stu.toString()); } /** * 获取类中的属性变量 * @throws SecurityException * @throws NoSuchFieldException * @throws IllegalAccessException * @throws IllegalArgumentException */ @org.junit.Test public void test3() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{ Student student=new Student(); Class<Student> c=Student.class; Field usernamField=c.getField("username"); usernamField.set(student, "Lyncc"); System.out.println(student.toString()); } /** * 获取值 * @throws NoSuchFieldException * @throws SecurityException * @throws IllegalAccessException * @throws IllegalArgumentException */ @org.junit.Test public void test4() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{ Student student=new Student(); student.setUsername("Lyncc"); student.setAge(21); Class<Student> c=Student.class; Field f=c.getDeclaredField("age"); //private属性必须加 f.setAccessible(true); Object obj=f.get(student); System.out.println(obj); } /** * 获取该类的制定方法 * @throws SecurityException * @throws NoSuchMethodException * @throws InvocationTargetException * @throws IllegalArgumentException * @throws IllegalAccessException * @throws NumberFormatException */ @org.junit.Test public void test5() throws NoSuchMethodException, SecurityException, NumberFormatException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{ Student student=new Student(); Class<Student> c=Student.class; Method m=c.getDeclaredMethod("getTotal", new Class[]{int.class,int.class,int.class,int.class}); m.setAccessible(true); Object result=m.invoke(student,new Object[]{new Integer(100),new Integer(100),new Integer(100),new Integer(100)}); System.out.println(result); } /** * 综合实例 * 场景: * 前台提交一个表单,例如学生的各科成绩,后台验证数据合理性的时候必须0<getChineseClz<100 * 0<getEnglishClz<100等等,如果有一个学生有10门课就必须写10次if的判断,代码很冗余 */ @org.junit.Test public void test6() throws NoSuchMethodException, SecurityException, NumberFormatException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{ //测试数据 Student student=new Student(); student.setChineseClz(97.0f); student.setEnglishClz(96.0f); student.setHistoryClz(98.5f); student.setPhysicalClz(95.4f); //传统做法 /*if(student.getChineseClz()!=0.0f){ validation(student.getChineseClz()); } if(student.getEnglishClz()!=0.0f){ validation(student.getEnglishClz()); } if(student.getHistoryClz()!=0.0f){ validation(student.getHistoryClz()); } if(student.getPhysicalClz()!=0.0f){ validation(student.getPhysicalClz()); }*/ //TODO //to do other things //反射做法 Class<Student> c=Student.class; Method[] stuMethods=c.getDeclaredMethods(); for(Method m:stuMethods){ if(m.toString().indexOf("Clz")>-1&&m.toString().indexOf("get")>-1){ Object result=m.invoke(student); if(validation((float)result)){ System.out.println("可以保存到数据库"); //TODO //saveDataToDataBase(); } } } } private boolean validation(float point){ if(0.0f<point&&point<100.0f){ System.out.println("数据正确"); return true; }else{ System.out.println("数据错误"); return false; } } }
希望有能帮助到大家的地方,谢谢,有什么不对的可鞭策
相关推荐
孙允中临证实践录.pdf
Rqalpha-myquant-learning对开源项目Rqalpha的改造,在应用上面更适合个人的应用。学习量化策略,对量化策略进行开发调试。2018-05-25程序更新集成大鱼金融提供的分钟线回测Mod,用来提供Jaqs分钟线数据源,测试程序通过。目前的改造情况1.增加ats.main.py,来驱动起回测,使程序可以使用pycharm进行开发调试2.增加批量回测功能3.在AlgoTradeConfig中进行配置回测的策略和所需要的参数信息,参数信息通过excel文件进行配置4.在ats.main.py中设置参数为batch,运行回测,会将输出的.csv文件放在cvsResult目录下,将回测的图片保存在picResult目录下。5.读取回测的.csv文件,提取账户信息,可以将不同参数回测的结果输出在同一张图片上,更加清晰的看清同一个策略,不同参数所带来的变化。6.从广发信号站点获取历史交易信号(站点已停止,此处无法继续)7.增加通用函数的封装,现阶段增加了对TA_LIB的调用封装(未完整完成)8.增加了对增量资金定投的情况的模拟,用
航班背景随着国内民航的不断发展,航空出行已经成为人们比较普遍的出行方式,但是航班延误却成为旅客们比较头疼的问题。台风,雾霾或飞机故障等因素都有可能导致大面积航班延误的情况。大面积延误给旅客出行带来很多不便,如何在计划起飞前2小时预测航班延误情况,让出行旅客更好的规划出行方式,成为一个重大课题。要求提前2小时(航班计划起飞时间前2小时),预测航班是否会延误3小时以上(给出延误3小时以上的概率)
comsol变压器绝缘油中流注放电仿真,使用PDE模块建立MIT飘逸扩散模型。 模型到手即用,提供MIT鼻祖lunwen中文版,及相关学习笔记资料。 流注放电,绝缘油,油纸绝缘。
基于STM8单片机的编程实例,可供参考学习使用,希望对你有所帮助
云南大数据交通太阳的云南大数据交通
comsol激光打孔(不通)水平集两相流仿真模型,涉及温度场流场水平集, 模型为复现模型,仅供学习,可自己更材料功率等参数 爽快确认模型无误并收送变形几何三维打孔模型或水平集抛光模型。
哈工深 自适应滤波课堂笔记
Django框架实现学生信息管理系统 总体概括 注册流程 首先进行输入用户名(邮箱)、密码以及验证码,输入完之后点击注册按钮。如果输入的不正确,提示错误信息。 如果一切信息填写正确无误,调用STMP模块发送激活邮件,用户必须要点击接收到邮箱链接,进行邮件激活后才方可登陆。 即使注册成功,没有激活的用户也不能登陆,用户以get的方式直接重定向到注册页面。 注册登录: 用户能在系统中进行登陆注册和忘记密码进行找回的功能。 个人中心:修改头像,修改密码,修改邮箱,可以看到我的信息。 日志记录: 记录后台人员的操作,方便发现BUG和查看各项调用进行时间。 导航栏:学生信息中有基本信息、年级及成绩信息的模块,能够排序筛选等功能。 多选操作: 可以选择多条记录进行删除操作,还可以在课程列表页可以对不同课程进行排序。 数据页码: 可以设置各项数据在每一页中显示的数量多少,进行翻页功能。 模块列表页: 能够有过滤器功能,在范围内进行查看数据。还能将数据导出为csv,x
车辆主动悬架防侧翻控制 利用Simulink和Carsim进行联合仿真,搭建主动悬架以及防倾杆模型,在不同转角工况下进行仿真试验,设置滑模等控制器计算维持车辆侧倾稳定性所需的力矩,将力矩分配到各个悬架实现控制效果。 控制效果良好,保证运行成功。 项目报告撰写请单独。
计算机系毕业设计
资源描述: HTML5实现好看的MT外卖订餐网站源码,好看的酷炫的MT外卖订餐网站源码,酷炫的MT外卖订餐网站源码模板,HTML酷炫的MT外卖订餐网站源码,内置酷炫的动画,界面干净整洁,页面主题,全方位介绍内容,可以拆分多个想要的页面,可以扩展自己想要的,注释完整,代码规范,各种风格都有,代码上手简单,代码独立,可以直接运行使用。也可直接预览效果。 资源使用: 点击 index.html 直接查看效果
MDPI下的sensors模板,.docx格式
新医林改错《内经·素问》分册.pdf
命令行查看基金、个股数据,使用天天基金和新浪财经的数据接口,欢迎大家fork基金2.0命令行查看基金、个股数据,使用天天基金和新浪财经的数据接口,欢迎大家fork环境准备运行环境Python3 所需的软件包requests prettytable colorama基金自选修改my_jijin.txt文本文件,每行都是一个您关注的基金代码启动方式python3 main.py
NiuCloud-Admin-SAAS 是一款快速开发SaaS通用管理系统后台框架, 前端采用最新的技术栈Vite+TypeScript+Vue3+ElementPlus最流行技术架构,后台结合PHP8、Java SDK、Python等主流后端语言搭建是一款快速可以开发企业级应用的软件系统。
脉振方波高频注入代码+增强型滑膜esmo代码,永磁同步电机高频注入程序 资料为C代码一份,大厂代码,可运行,经典流传; 配套一篇代码对应的说明文档,详细算法说明; 脉振方波注入方法相对于脉振正弦信号注入的形式,信号处理的过程少了一些滤波器 ,计算更简单,并且由于信号频段较高,可以实现更高的动态响应能力。 增强滑膜控制;
逆变器下垂控制,微电网逆变器孤岛下垂控制,波形输出完美
multisim学习电路基础视频共42讲(个人觉得超赞)5G提取方式是百度网盘分享地址
基于 Vue 数据可视化组件(类似阿里DataV,大屏数据展示)编辑器。基于 Vue 数据可视化组件(类似阿里DataV,大屏数据展示)编辑器。项目初始化npm install启动开发环境npm run dev项目打包上线npm run buildLints和fixes文件npm run lint