Mit*_*tri 2 java tostring pojo apache-stringutils
是否需要在所有POJO类中添加toString()?
这是一个非常基本的问题,但我担心在每个POJO课程中编写一段代码.
我已经关注了很多java源代码,我在那些POJO类中发现了一些常见的东西 -
@Override
public String toString() {
return StringUtil.toDetailString(this);
}
Run Code Online (Sandbox Code Playgroud)
是序列化还是有助于提高性能还是其他什么?
这取决于你将要使用的POJO.一般来说,这当然不是必需的.toString()虽然它可能被某些序列化框架使用,但它不用于默认的Java二进制序列化.(我不知道有没有这样做,但这远非不可能.)
也没有性能优势.
这里是潜在的,虽然诊断的好处-这是主要的使用toString()-得到一个字符串表示用于诊断目的,无论是在调试程序时或登录.在某些情况下,您可能还希望依赖于toString()非诊断目的,但是当您这样做时,您通常会知道...并且通常这样的实现不仅仅是StringUtil.toDetailString- 听起来它只会产生一些可能的东西-JSON-like更多针对开发人员而不是其他任何东西.
根据我的经验,我更喜欢toString()在所有POJO类中添加一个方法,因为如果要使用日志框架打印实例的当前状态,它会有所帮助.
默认toString()方法输出由以下内容组成的字符串:
getClass().getName() + '@' + Integer.toHexString(hashCode()).
99.8%的情况下,这没有用.通常,您希望读取类属性的值.为此你需要覆盖toString().
你永远不知道什么时候你想在调试框架之外看到它的状态.
如果您/其他人记录您的实例以查看它包含的内容,如果您不覆盖toString()输出将只是名称和哈希; 这不是很有用的信息.
根据我所知,性能方面根本不受影响,也不是序列化(使用严格的框架).
我建议使用IDE 的源代码生成功能来生成toString()方法.它速度快,可以为您提供更多控制.