是否需要在所有 POJO 类中添加 toString() ?
这是一个非常基本的问题,但我担心在每个 POJO 类中编写一段代码。
我关注了许多 Java 资源,并且在这些 POJO 类中发现了一个共同点——
@Override
public String toString() {
return StringUtil.toDetailString(this);
}
是否需要序列化或有助于提高性能或其他?
是否需要在所有 POJO 类中添加 toString() ?
这是一个非常基本的问题,但我担心在每个 POJO 类中编写一段代码。
我关注了许多 Java 资源,并且在这些 POJO 类中发现了一个共同点——
@Override
public String toString() {
return StringUtil.toDetailString(this);
}
是否需要序列化或有助于提高性能或其他?
这取决于您将 POJO 用于什么用途。一般来说,这当然不是必需的。toString()
在默认的 Java 二进制序列化中不使用,尽管它可能被某些序列化框架使用。(我不知道有任何人这样做,但这远非不可能。)
也没有性能优势。
但是,无论是在调试器中还是在记录时,都可能有一个诊断好处 - 这是主要用途toString()
- 获取用于诊断目的的字符串表示。在某些情况下,您可能还希望依赖于toString()
非诊断目的,但是当您这样做时您通常会知道这一点......通常这样的实现不会只是StringUtil.toDetailString
- 听起来它可能会产生一些东西-JSON-like,它比其他任何东西都更针对开发人员。
根据我的经验,我更喜欢toString()
在所有 POJO 类中添加一个方法,因为如果您想打印实例的当前状态,无论是否使用日志框架,它都会有所帮助。
默认toString()
方法输出由以下组成的字符串:
getClass().getName() + '@' + Integer.toHexString(hashCode())
.
这在 99.8% 的情况下都没有用。通常你想读取你的类属性的值。为此,您需要覆盖toString()
.
您永远不知道何时想在调试框架之外查看其状态。
如果您/其他人记录您的实例以查看它包含的内容,如果您不覆盖输出,toString()
则输出将只是名称和哈希;这不是很丰富。
据我所知,性能方面完全没有影响,序列化(使用严肃的框架)也没有影响。
我建议使用 IDE 的源代码生成功能来生成toString()
方法。它速度快,给你更多的控制。
如果您对toString
继承自Object
. 默认值基本上为您提供类名和哈希值。
不,在所有 Pojo 类中都有 toString 不是“必需的”。如果你的 pojo 中没有 toString 方法,那么将调用超类(Object)的 toString 方法。因为一天结束,您所有的类都扩展了 Object 类。
这是 Object-toString() http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#toString()的 javadoc
public String toString() 返回对象的字符串表示。通常,toString 方法返回一个“以文本方式表示”该对象的字符串。结果应该是一个简洁但信息丰富的表示,易于人们阅读。建议所有子类重写此方法。Object 类的 toString 方法返回一个字符串,该字符串由对象作为其实例的类的名称、at 符号字符“@”和对象哈希码的无符号十六进制表示形式组成。换句话说,此方法返回一个等于以下值的字符串:
getClass().getName() + '@' + Integer.toHexString(hashCode()) 返回:对象的字符串表示。