ReflectionToStringBuilder的使用分析与优化

本文探讨了使用Apache Commons Lang自动化实现Object类的手写toString方法的简化与安全问题,通过引入ToStringBuilder类及其子类ReflectionToStringBuilder进行优化。详细介绍了如何避免私有属性泄露并提供示例代码,同时阐述了ToStringBuilder类的设计模式和其在代码分离与多态扩展方面的应用。最后,文章总结了自动化toString方法的优点与改进策略。

前因:Object 类 手写toString 方法 太繁琐, 修改太麻烦

后果:利用 Apache Commons lang 自动化实现 toString

优势:①代码简洁 , 无须任何配置

   ② Model 属性变化 , 无需修改 toString

缺陷:安全性问题 , 反射私有属性值也会暴露 .

改进:利用ToStringBuilder弥补(通过 ReflectionToStringBuilder 子类 , 覆盖其 accept 方法来加以筛选 )

示例代码如下:

public String toString() {

return (new ReflectionToStringBuilder(this) {

protected boolean accept(Field f) {

return super.accept(f) && !f.getName().equals(“password”);

}

}).toString();

}

 

代码解释: toString 方法会跳过名为 password 属性

 

ToStringStyle 抽象类与设计模式

ToStringBuilder 封装 的三个属性 :

/**

* Current toString buffer, not null.

*/

private final StringBuffer buffer;//封装最终结果

/**

* The object being output, may be null.

*/

private final Object object;//toString 对象

/**

* The style of output to use, not null.

*/

private final ToStringStyle style;

 

关于类型ToStringStyle 在 ToStringBuilder 源码中的利用 ,

ToStringBuilder 类中所有的方法 append 都是通过调用属性 style 相应方法实现 .

ToStringStyle 设计模式 : 单例模式的衍生,返回子类对象

本文小结 :

①ToStringBuilder分而治之, 通过属性 ToStringBuilder 来分离功能的调用与实现 .          ②子类达到多态的单例少见,  通过子类 StandardToStringStyle 提供了一个更为灵活的扩展 .

③具体实现大家可以参考 ReflectionToStringBuilder 源码 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值