版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、解决实体类噩梦:联合实体类(Java反射+泛型实际应用) 小菜提到的实体类,即项目中业务或者数据库表的映射,貌似也可以称为模型,不同的语言中叫法不同吧!举个例子,比如在某个Web页面中,表单上有大量的数据需要提交,如果是初学者,很可能这样接收参数:String param1;String param2;String param3;这样做的坏处很多,比如:代码会显得很乱,可能会出现大量重复代码,最主要的就是没有做到面向对象的“封装性”,导致程序不容易维护。由此,聪明的程序员们提出了实体类的概念,也就是用类来封装业务所需要的数据。public class User private String u
2、id;private String pwd;public String getUid() return uid;public void setUid(String uid) this.uid = uid;.这样一来,我们在保存数据时,只需创建一个对象,然后通过“.”的方式来访问对象的属性,提高扩展性、提高复用性、代码简洁等等好处不言而喻。在实际使用中,实体类往往是和某个业务或者数据库表相对应的,看起来很简单,但随着需求的复杂化,业务和业务之间可能会交叉,表和表之间可能会联合查询。这样一来,以前一一对应的实体类,便无法满足需求,因为某个实体类中可能找不到我们需要的属性,但是它却在另一个实体类中,
3、而我们又不想随便在某个实体类中添加一个毫不相关的属性,因为这样做可能会打破类的职责单一原则。因此,我们不得不再新建一个实体类ClassAAndClassB,这个实体类包含了类A和类B的所有属性,对于稍有经验的程序员来说,这绝对是个噩梦,因为组合的可能性是在是太多,而且可能是很多个实体组合,等待我们的将是无数的实体类,导致程序混乱不堪。小菜一直苦于此事,今天终于通过Java的反射和泛型写了一个“联合实体类”。通过这个联合实体类,可以把任意多个实体类融合成一个实体类。联合实体类代码:34 /*5 * 联合实体类6 * author 杨元7 *8 */9 public class UniteEnti
4、ty 1011 /联合实体对象集合12 List<Object> entitys = null;13 /方法名称14 String fnName = ""15 /方法对象16 Method method = null;1718 /*19 * 构造方法20 * param entitys 需要联合的实体对象集合21 */22 public UniteEntity(List<Object> entitys)23 this.entitys = entitys;24 2526 /*27 * 获取某个取值方法28 * param fnName 方法名称29 *
5、 return 该取值方法返回值类型30 */31 public Class getFunction(String fnName)32 /保存方法名称33 this.fnName = fnName;34 /查找方法35 Method m = findMethod();36 /判断方法是否存在37 if(m != null)38 /获取目标方法的返回值类型 39 Class type = m.getReturnType(); 40 /保存取值方法对象41 method = m;42 /返回该取值方法返回值类型 43 return type;44 else45 return null;46 47
6、4849 /*50 * 获取某个赋值方法51 * param fnName 方法名称52 * return 该赋值方法参数类型53 */54 public Class setFunction(String fnName) 55 /保存方法名称56 this.fnName = fnName;57 /查找方法58 Method m = findMethod();59 /判断方法是否存在60 if(m != null)61 /获取目标方法的参数类型62 Class type = m.getParameterTypes()0; 63 /保存赋值方法对象64 method = m;65 /返回该赋值方法
7、参数类型66 return type;67 else68 return null;69 70 7172 /*73 * 调用某个方法,为属性赋值74 * param <T> 赋值方法的参数类型 75 * param c76 * param value 值内容77 */78 public <T> void setValue(Class<T> c,T value) 79 /遍历实体类集合80 for(Object o : entitys)81 /出错继续执行82 try83 method.invoke(o, value); break;84 catch(Excep
8、tion ex)85 86 8788 /*89 * 调用某个方法,取得属性的值90 * param <T> 取值方法的返回值类型 91 * param c92 * return 取得值的内容93 */94 public <T> T getValue(Class<T> c) 95 /遍历实体类集合96 for(Object o : entitys)97 /出错继续运行98try99 /由于invoke返回的是Object类型,因此要强制转换成T类型100 return (T)method.invoke(o);101 catch(Exception ex)102
9、 103 return null;104 105106 /*107 * 从实体对象集合中查找某个方法108 * return 方法对象109 */110 private Method findMethod()111 /遍历集合,寻找方法112 for(Object o : entitys)113 /保证出错能继续运行114 try115 /获取对象所有公有方法116 Method methods = o.getClass().getMethods();117118 /遍历方法119 for(Method m : methods)120 /匹配是否有目标方法121 if(fnName.equal
10、s(m.getName()122 /返回方法对象123 return m;124 125 126 catch(Exception ex)127 128 return null;129 130 调用方法:1 /创建一个对象集合2 List<Object> list = new ArrayList<Object>();4 /将需要融合的实体类填入集合5 list.add(new User();6 list.add(new Enterprise();78 /创建联合实体类对象9 UniteEntity ue = new UniteEntity(list);1011 int i
11、 = 109;1213 /调用实体类中方法名为setEnno的方法(赋值方法),并给一个参数i14 ue.setValue(ue.setFunction("setEnno"), i);15 /调用实体类中方法名为getEnno的方法(取值方法),并打印返回值说明:用法很简单,创建联合实体对象的时候必须传入需要融合的实体对象集合。如果想调用的方法是取值方法,则先调用联合实体对象的getFunction方法,参数是方法的名称,一定要写对!最好是复制!这个步骤会查找到指定的方法,并且确定该方法的返回值类型,然后把getFunction方法的返回值作为参数,调用联合实体对象的getValue方法,即可取得属性值。如果想调用的方法是赋值方法,则先调用联合实体对象的setFunction方法,同理,该方法会确定参数的类型,把setFunction方法的返回值作为参数,调用联合实体对象的setValue方法,再加上需要赋给的值,即可给属性赋值。由于使用了泛型技术,所以本类比较安全、稳定。调用赋值方法时,如果传入的值和方法的参数类型不同,直接赋值失败,不会抛出异常;调用取值方法时,直接对取出来的值进行强制类型转换即可,无需验证数据类型(例如:int items =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- CCS的安装及设置
- 钢质防火门安装工程施工组织设计方案
- 2026汽车驾驶员(中级)模拟考试题库附答案
- (完整版)污水排放施工专项方案
- ICU病房血液灌流机故障现场处置方案演练脚本
- 游泳池水处理系统施工方案及技术措施
- 广告安装工程施工组织实施方案
- 康复科住院医师(实习生)出科理论考核试题与答案
- 外墙多彩漆施工方案及技术措施
- 2026江西鹰潭市贵溪市科研助理岗位招聘45人笔试题库带答案详解
- 2026年主管护师职称考试试题及答案
- 2026年考评员考试试题含答案解析
- 2026云南昆明市五华区人民法院招聘第三批合同制司法辅助人员3人笔试参考题库及答案详解
- 厦门市2025年福建厦门市思明区部分单位联合招聘非在编工作人员16人考试笔试历年参考题库典型考点附带答案详解
- 2026年同性恋测试题心理测试及答案
- 2026服装印花行业市场深度调研及发展趋势与投资价值评估研究报告
- 2025-2026学年初中人教版七年级地理下学期经典题专练之日本
- 2026年度全国“安全生产月”知识培训测试及答案
- 银行储蓄存款业务流程汇报材料
- GB/T 23858-2009检查井盖
- 土方开挖专项施工与方案
评论
0/150
提交评论