POJO类中的toString()

时间:2014-05-05 10:21:59

标签: java tostring pojo apache-stringutils

是否需要在所有POJO类中添加toString()?

这是一个非常基本的问题,但我担心在每个POJO课程中都要编写一段代码。

我已经关注了很多java源代码,我发现这些POJO类中有一些常见的东西 -

@Override
    public String toString() {
        return StringUtil.toDetailString(this);
    }

是否需要序列化或有助于提高性能?

4 个答案:

答案 0 :(得分:5)

这取决于您将要使用POJO的内容。一般来说,这当然不是必需的。 toString()未在默认Java二进制序列化中使用,尽管某些序列化框架可能会使用它。 (我不知道有任何这样做,但这远非不可能。)

也没有性能优势。

可能是诊断的好处 - 这是toString()的主要用途 - 获取字符串表示以用于诊断目的,无论是在调试器中还是在记录时。在某些情况下,您可能还希望依赖toString()用于非诊断目的,但是当您这样做时通常会知道...通常这样的实现不仅仅是StringUtil.toDetailString - 听起来它只会产生一些可能类似JSON的东西,它更多地针对开发人员而不是其他任何东西。

答案 1 :(得分:5)

根据我的经验,我更喜欢在所有POJO类中添加toString()方法,因为如果您想使用日志框架打印实例的当前状态,它会有所帮助。

默认的toString()方法输出一个由以下字符组成的字符串:

getClass().getName() + '@' + Integer.toHexString(hashCode())

99.8%的时间没用。通常,您希望读取类属性的值。为此,您需要覆盖toString()

你永远不知道什么时候你想在调试框架之外看到它的状态。

如果您/其他人记录您的实例以查看它包含的内容,如果您不覆盖toString(),则输出将只是名称和哈希值;这不是很有用。

根据我所知,性能方面根本没有受到影响,也没有序列化(使用严格的框架)。

我建议使用IDE的源代码生成功能来生成toString()方法。它速度快,可以为您提供更多控制。

答案 2 :(得分:1)

如果您对从toString继承的默认实现感到满意,则无需覆盖Object。默认值基本上为您提供类名和哈希值。

答案 3 :(得分:1)

不,它不是"必需"在所有Pojo类中都有toString。如果你的pojo中没有toString方法,那么将调用超类(Object)的toString。因为一天结束时,所有类都扩展了Object类。

这是Object-toString()的javadoc http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#toString()

  

public String toString()   返回对象的字符串表示形式。   通常,toString方法返回一个"文本字符串   代表"这个对象。结果应该是简洁但是   信息表达,便于人们阅读。它是   建议所有子类都重写此方法。 toString   类Object的方法返回一个由名称组成的字符串   对象是实例的类,符号字符`@',   和哈希码的无符号十六进制表示   宾语。换句话说,此方法返回一个等于的字符串   价值:

     

getClass()。getName()+' @' + Integer.toHexString(hashCode())   返回:对象的字符串表示形式。