- 浏览: 42013 次
- 性别:
- 来自: 未知
最新评论
-
teasp:
哪有两个Long啊?分明是两个long,这是原始类型,它们所占 ...
如何计算java内存大小--谁吃了对象引用的16byte? -
niwtsew:
楼主总结的不错,我也有此体会。一定要淡定
这段代码不是我写的
先来看一个类
public class ComplexObject implements Serializable { private static final long serialVersionUID = -3986831089858789914L; private int id; private String name; private AccountTypeEnum type; private String national; private Date gmtCreate; private Date gmtModified; private String memo; private SubType1 subType1; private List<SubType2> subType2List; private final Map<String, String> infoMap = new HashMap<String, String>(); }
复杂对象ComplexObject包含了如下属性:
1基本类型:String、枚举、int
2Date对象
3.自定义对象
4.List集合
5.Map对象
如果输出的对象更易看清每一个字段的值呢
1.ToStringBuilder的默认style
调用方式:ToStringBuilder.reflectionToString(object)
2.ToStringBuilder的默认MULTI_LINE_STYLE
调用方式:ToStringBuilder.reflectionToString(customer,ToStringStyle.MULTI_LINE_STYLE)
3.自定制toString方法
private void getFields(Object obj, StringBuffer str, int level, boolean isListElement) throws IllegalArgumentException, IllegalAccessException { if (obj == null) { return; } Class clazz = obj.getClass(); if (clazz == ComplexObject.class) { str.append(" " + clazz.getSimpleName() + "\n"); level++; } // 当前输入对象为List元素 if (isListElement) { for (int i = 0; i < level; i++) { str.append(" "); } str.append("└—— " + clazz.getSimpleName() + "\n"); level++; isListElement = false; } // 获得当前输入对象声明的所有属性 Field[] fieldArray = clazz.getDeclaredFields(); for (Field field : fieldArray) { for (int i = 0; i < level; i++) { str.append(" "); } field.setAccessible(true); // 当前属性未赋值 if (field.get(obj) == null) { str.append("└—— " + field.getName() + " = " + field.get(obj) + "\n"); } else if (field.getType() == SubType1.class || field.getType() == SubType2.class ) { str.append("└—— " + field.getName() + "\n"); getFields(field.get(obj), str, level + 1, false); } else if (field.getType() == List.class) { str.append("└—— " + field.getName() + "\n"); List list = (List) field.get(obj); for (Object object : list) { getFields(object, str, level + 1, true); } } else if (field.getType() == Map.class) { str.append("└—— " + field.getName() + "\n"); level++; Map map = (Map) field.get(obj); Set keySet = map.keySet(); for (Object key : keySet) { for (int i = 0; i < level; i++) { str.append(" "); } str.append("└—— " + key + " = " + map.get(key) + "\n"); } } else if (field.getType() == Date.class) { str.append("└—— " + field.getName() + " = " + new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss") .format((Date) field.get(obj)) + "\n"); } else { str.append("└—— " + field.getName() + " = " + field.get(obj) + "\n"); } } }
调用方式:
public String toString() { StringBuffer str = new StringBuffer("\n----------------------\n"); try { this.getFields(this, str, 0, false); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } str.append("----------------------\n"); return str.toString(); }
输出结构:
---------------------- ComplexObject └—— serialVersionUID = -3986831089858789914 └—— id= 123 └—— name = ss └—— type = PRIVATE_ACCOUNT └—— national = null └—— createStatus = OPEN └—— enableStatus = CAN_USE └—— gmtCreate = 2008-09-18 17:42:27 └—— gmtModified = null └—— memo = null └—— subType1List └—— SubType1 └—— SubType1属性1= 2088102000419591 └—— SubType1属性2 = 2 └—— SubType1属性3 = 3 └—— SubType1属性4 = 4 └—— SubType1属性5 = 5 └—— SubType2 └—— SubType2属性1= 1 └—— SubType2属性2= 2 └—— SubType2属性3= 3 └—— SubType2属性4= 4 └—— infoMap └—— key1= value1 └—— key2= value2 └—— key3= value3 └—— key4= value4
使用反射,支持任意对象类型嵌套
发表评论
-
系统的性能优化--记项目总结
2011-09-06 00:40 1112项目过去都3个多月了, ... -
转载:面向程序员的数据库访问性能优化法则
2010-12-22 00:06 760http://blog.csdn.net/yzsind/arc ... -
logger的功能
2010-07-19 23:40 9231.最明显的功能,排查线上问题。 平时遇到bug时,要 ... -
我们需要什么样的logger
2010-07-19 23:28 877在生产环境中,针对具 ... -
大资源的分配与控制
2010-07-19 23:13 758在应用中,总有一些业务操作可能会引起大数据量的查询,基于应用健 ... -
缓存小技巧--实现cache的锁
2010-07-19 22:34 1185在有些业务背景下,需要cache防止并发的情况,然后cache ... -
缓存小技巧--缓存的分级
2010-07-19 22:22 917在大型的互联网应用中,如果缓存的是大量的数据,可以考虑多级缓存 ... -
缓存小技巧--缓存key的分组
2010-07-19 22:15 2326这篇没有任何技术含量,仅仅是一个良好的编程习惯 随着应 ... -
缓存小技巧--key的关联性
2010-07-19 22:11 1565如果我们对一个比较复杂的模型做cache,会有如下需求: 1 ... -
缓存小技巧--NullObject模式&&表识cache
2010-07-19 22:01 1014在我们的应用中,有一张表的查询量非常之大,高峰期时6000次/ ... -
缓存小技巧--异步更新缓存时remove cache数据
2010-07-12 23:24 3958在支撑大规模、高并发、高可用的互联网应用中,异步更新分布式缓存 ... -
AOP应用
2010-06-26 15:51 920AOP应用已经很广了,谈一谈平时工作用到的地方: 1. 打印 ... -
胆大心细的游戏--SOA环境下系统重构
2009-12-29 02:40 0站坑。。。 -
探寻ThoughtWorks的敏捷实践,专访ThoughtWorks咨询师 <摘要>
2009-11-24 13:52 1057敏捷包括TDD、重构、简单设计、持续集成等。 TDD确保编码 ... -
Don’t Ask, Tell
2009-11-17 02:55 825Don’t Ask, Tell 先举一个计算工资的老例 ... -
Java对象的强、软、弱和虚引用
2009-11-12 20:03 635在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程 ... -
java序列化总结
2009-10-26 23:10 7571.Serializable接口 只是一个表识接口,仅仅是告 ... -
可伸缩性的艺术(2)
2009-07-26 16:41 888本来翻译出来想放在技 ... -
可伸缩性的艺术(1)
2009-07-26 16:36 1180本来翻译出来想放在技 ... -
一些实用命令
2009-05-26 11:05 5551.windows下的删除 还在为windows下删除大文件 ...
相关推荐
综上所述,C#中的ToString方法结合格式化代码,为数据的文本表示提供了强大的定制能力,无论是基本数值还是复杂的日期时间数据,都能得到精确且美观的文本输出。这对于提高应用程序的用户体验和数据处理的准确性至关...
"打印自定义复杂对象工具类"就是为了满足这种需求而设计的一个实用工具。它可以帮助开发者便捷地打印出对象内部的属性、嵌套对象以及数组等复杂的数据结构,使得代码的调试过程更为直观。 首先,我们要理解什么是...
这个方法对于理解和调试代码至关重要,因为当你尝试打印或输出一个对象时,JavaScript引擎默认会调用该对象的`toString`方法。本篇文章我们将深入探讨`toString`方法的初始应用,以及它在JavaScript对象中的工作原理...
总结来说,C#的`ToString()`方法提供了丰富的格式化选项,让开发者能够根据需求定制输出,从简单的数字和货币格式到复杂的日期时间表示,都能轻松应对。理解并熟练运用这些格式化技巧,能显著提升代码的可读性和实用...
格式化代码是`ToString`方法的关键组成部分,它允许开发者定制输出字符串的格式。这些代码必须用大括号`{}`包围,以区分于普通文本。若要在格式中使用大括号本身,则需使用连续的两个大括号,即`{{`或`}}`。 #### ...
2. ToString()方法是所有.NET对象的通用方法,用于将对象转换为字符串形式。它可以通过指定的格式字符串来定制输出格式。 3. 格式化类型包括: - "n":表示数字格式,可以按当前文化或区域设置显示货币值。 - "C...
在使用`DateTime.ToString()`方法时,可以结合`DateTimeFormatInfo`对象来定制更为复杂的格式,例如使用特定地区的日期时间格式。 总之,`ToString()`和`string.Format`方法是C#中强大的数据转换工具,能够根据需要...
通过重写`toString()`,我们可以定制输出,如返回`Person`对象的`name`和`age`,即`return "Name: " + p.name + ", Age: " + p.age;`。 2. **重写规则** 重写`toString()`方法意味着子类提供了对父类`toString()`...
通过重写`toString`,我们可以在需要字符串表示对象时,提供定制化的输出,这对于调试、日志记录或者在用户界面上显示信息都非常有用。然而,需要注意的是,直接修改全局对象(如数组的`toString`)可能会对其他代码...
4. **处理复杂结构**:支持处理嵌套的JSON对象和数组,可以轻松地处理复杂的JSON数据结构。 ### 示例代码 ```java import net.sf.json.JSONObject; import net.sf.json.JSONSerializer; public class JsonDemo { ...
`ToString()`方法允许我们根据特定的模式或格式字符串来定制输出。例如,如果我们想要显示“年-月-日”的格式,可以这样写: ```csharp DateTime.Now.ToString("yyyy-MM-dd") ``` 这里的"yyyy-MM-dd"就是一种标准...
默认情况下,这个方法返回的是类型名加上句柄的十六进制表示,这对于调试可能是有用的,但在实际应用中,往往需要根据类的具体信息来定制`ToString()`的输出。 当你创建一个自定义的类或结构时,重写`ToString()`...
4. **对象的深度比较**:`ObjectUtils.equals()`不仅检查对象是否引用相同,还支持深度比较,这在比较复杂对象时很有帮助。 5. **空字符串处理**:`ObjectUtils.isEmpty()`和`ObjectUtils.isNotEmpty()`可以用来...
`ToStringBuilder`则可以帮助生成整洁、易读的调试信息,这对于理解复杂对象的状态非常有用。 在给定的压缩包文件"commons-lang3-3.3.2"中,包含了完整的Apache Commons Lang 3.3.2库的JAR文件。这个JAR文件可以被...
在Hadoop MapReduce框架中,OutputFormat扮演着至关重要...总之,MapReduce的OutputFormat提供了一种灵活的方式,使得开发者可以根据实际需求定制数据输出的格式和位置,这对于满足各种复杂的大数据处理场景至关重要。
在处理大型复杂对象时,可能需要考虑性能问题,因为`toString()`可能会被频繁调用。在某些情况下,可以考虑只包括部分关键属性,或者使用某种格式化方式来控制输出的长度和内容。 总的来说,理解并正确使用`...
然而,对于复杂的对象结构或需要高度定制的 XML 格式,可能需要使用更强大的工具,如 JAXB 或 XStream。 总的来说,Betwixt 是一个轻量级的解决方案,适合快速地在 Java beans 和 XML 之间进行简单的转换。如果你的...
可以使用`includeFieldNames`和`of`属性来定制输出格式。 3. **使用Lombok的好处** - **减少重复代码**: Lombok通过注解自动化生成常规的getter和setter,使代码更加简洁,减少了程序员的工作量。 - **提高代码...
- `ToString()`:以默认格式输出日期时间。 - `ToShortDateString()`:输出短日期格式。 - `ToLongDateString()`:输出长日期格式。 - `ToShortTimeString()`:输出短时间格式。 - `ToLongTimeString()`:输出长时间...