如何在MultilineRecursiveToStringStyle中避免双括号初始化(DBI)
避免双括号初始化(DBI)的修改方案
直接将双括号初始化的逻辑拆分为对象实例化+显式调用set方法即可,修改后的代码如下:
@Override public String toString() { MultilineRecursiveToStringStyle style = new MultilineRecursiveToStringStyle(); style.setUseShortClassName(true); style.setUseIdentityHashCode(false); return new ReflectionToStringBuilder(this, style).build(); }
修改思路:
- 先单独创建
MultilineRecursiveToStringStyle的实例,不再使用匿名内部类结合实例初始化块的双括号写法 - 通过实例对象直接调用配置方法,完成属性设置
- 最后将配置好的style对象传入
ReflectionToStringBuilder构造器,完成toString逻辑
这样修改后,既保留了原代码的所有功能,又彻底避免了双括号初始化带来的潜在问题(比如意外持有外部类引用、无法序列化等)。
内容的提问来源于stack exchange,提问作者kill-9
相关产品推荐
相关产品推荐

