



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在 Java 的开发过程中,编写对应数据库表信息的 entity 是必须的,很多时候为了调试我们 很有必要重写 entity 的 toString 方法,为我们返回有用的 entity 信息, 一般是希望输出 entity 的属性名对应的属性值。 toString 方法可以是这个样子的: Override public String toString() return “username: “ + this.getUsername() + “ 没什么,无非是手动拼装一把而已。不过有的时候项目大了,几百个 entity 都去手动拼装 一把,实在有点让人心烦,更何况有些变态的 entity 一来就是百十个属性, 对于这种情况,这样拼装无疑是枯燥而且耗时的。 有没有简单一点的方法呢?小弟近来想到一个比较拙劣的方法,分享一把,有需要的可以 看看,一个简单的工具类: package com.huawei.zhangbo; import java.lang.reflect.Field; import java.lang.reflect.Method; public class ToStringUtil public static String toString(Entity entity, String. fieldName) Class cls = entity.getClass(); StringBuffer buffer = new StringBuffer(cls.getSimpleName() + “: “); try /不获取私有方法 Method methods = cls.getMethods(); if(null != fieldName for(String fn: fieldName) if(mn.equalsIgnoreCase(“get“ + fn) String value = method.invoke(entity).toString(); buffer.append(mn + “=“ + value + “ else /得到所有 field Field fields = cls.getDeclaredFields(); for(Method method: methods) String mn = method.getName(); for(Field field: fields) String name = field.getName().toString(); if(mn.equalsIgnoreCase(“get“ + name) String value = method.invoke(entity).toString(); buffer.append(name + “=“ + value + “ catch(Exception e) e.printStackTrace(); return buffer.substring(0, buffer.length()-1).toString(); 小小的解释一把,非常简单,该方法有两个参数,Entity,String. ,Entity 是我自己写 的一个空接口,和 Serializable 接口一样起一个标识的作用, 标识实体类,很明显如果你的实体类不实现这个接口就不能使用我的工具类。我这样搞有 我的理由,如果闲麻烦完全可以用 Object 取代之。第二个 参数 String.,即 String 类型的参数,这样的写法具有灵活性,你可以不传这个参数,也可 以传一个或者多个,最终 Java 会把你的参数封装成 String 类型的数组, 为什么不直接传 String 类型的数组,还搞这些花里胡哨的,已经说过,具有灵活性,如果 写成 String 类型的数组你就必须传,即使传一个空数组,这样显然没有意义, 你懂得。这个参数就是传你需要输出的属性的属性名称,如果不传,输出全部属性(有 get 方法的,你懂得) 下面简单的说一下主要的代码执行的逻辑, 1,获取 Entity 参数的 Class 对象: Class cls = entity.getClass(); 2,通过反射获取该 Entity 的所有 public 方法:Method methods = cls.getMethods(); 3,判断有没有 String.参数 4,如果有,执行这些属性的 get 方法获取值与它们对应的属性名组装成字符串: String value = method.invoke(entity).toString(); buffer.append(mn + “=“ + value + “ 5,如果没有,就需要输出全部属性的属性值,怎么搞,首先获取该 entity 的全部私有属性 (为什么是私有,你懂的,当然只要你愿意完全可以得到所有属性输出) Field fields = cls.getDeclaredFields(); 6,通过所有属性和所有方法的循环查找,找到对应属性的 get 方法执行之,得到返回结果, 在与属性名拼装字符串即可 7,最后返回拼装的字符串。 由于很简单,讲得比较粗略 最后你的 toString 方法就简单了 public String toString() return ToStringUtil.toString(this,“username“);/只输出 username 属性 或 public String toString() return ToStringUtil.toString(this);/输出所有属性 仅此而
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版写字楼装修工程场地租赁合同样本
- 2025版矿石产品市场调研与评估服务合同样本下载
- 2025房地产代理商合作房产评估服务协议
- 2025房地产项目开发与城市综合体配套合同
- 2025版社区儿童安全教育项目合同书
- 2025年度智能社区物业综合服务合同范本
- 2025年自驾游车辆租赁及保险保障合同
- 2025大型商场家居建材租赁与销售代理合同
- 贵州省修文县2025年上半年公开招聘城市协管员试题含答案分析
- 2025版涂料工程劳务分包合同执行细则
- 无肝素透析考试题及答案
- 智能生鲜机器人项目商业计划书
- 生物质颗粒购销合同
- 临床教学经验总结
- 高中化学拔尖创新人才早期培养路径
- 2025年四川宽窄实业有限责任公司招聘笔试参考题库含答案解析
- Unit 1 完形填空训练8篇-2023-2024学年英语八年级上册单元冲刺满分题型训练(人教版)
- CPK计算表格电子表格
- DB32/T 1086-2022 高速公路建设项目档案管理规范(修订)
- 《滤芯销售培训》课件
- 2025年中国人保招聘笔试参考题库含答案解析
评论
0/150
提交评论