Java POJO类中的toString()
是否需要在所有POJO类中添加toString() 这是一个非常基本的问题,但我担心在每n个POJO类中编写一段代码 我遵循了许多java源代码,在这些POJO类中发现了一些常见的东西-Java POJO类中的toString(),java,tostring,pojo,apache-stringutils,Java,Tostring,Pojo,Apache Stringutils,是否需要在所有POJO类中添加toString() 这是一个非常基本的问题,但我担心在每n个POJO类中编写一段代码 我遵循了许多java源代码,在这些POJO类中发现了一些常见的东西- @Override public String toString() { return StringUtil.toDetailString(this); } 它是串行化所必需的,还是有助于提高性能或其他方面的功能?如果您对继承自对象的默认实现感到满意,则无需重写toString
@Override
public String toString() {
return StringUtil.toDetailString(this);
}
它是串行化所必需的,还是有助于提高性能或其他方面的功能?如果您对继承自
对象的默认实现感到满意,则无需重写toString
。默认值基本上为您提供类名和哈希值。这取决于您将使用POJO的目的。一般来说,这当然不是必需的toString()
不用于默认的Java二进制序列化,尽管某些序列化框架可能会使用它。(我不知道有谁会这样做,但这绝非不可能。)
也没有性能优势
不过,无论是在调试器中还是在日志记录时,都有一个潜在的诊断好处,这就是toString()
的主要用途,即获取用于诊断目的的字符串表示。在某些情况下,您可能还希望依赖toString()
进行非诊断,但您通常在执行此操作时知道这一点。。。通常,这样的实现不仅仅是StringUtil.toDetailString
——这听起来像是要产生类似于JSON的东西,它比其他任何东西都更面向开发人员。不,在所有Pojo类中都不需要toString。如果pojo中没有toString方法,那么将调用超类(对象)的toString。因为一天结束时,所有的类都会扩展对象类
下面是对象-toString()的javadoc
公共字符串toString()
返回对象的字符串表示形式。
通常,toString方法返回一个“文本”字符串
表示“此对象”。结果应该是一个简洁但不复杂的过程
易于阅读的信息表示法。它是
建议所有子类重写此方法。toString
类对象的方法返回一个字符串,该字符串由
对象是其实例的类,符号为“@”,
和的哈希代码的无符号十六进制表示形式
对象换句话说,此方法返回一个字符串,该字符串等于
价值:
getClass().getName()+'@'+Integer.toHexString(hashCode())
返回:对象的字符串表示形式
根据我的经验,我更喜欢在所有POJO类中添加一个toString()
方法,因为它可以帮助您打印实例的当前状态,无论是否使用日志框架
默认的toString()
方法输出由以下内容组成的字符串:
getClass().getName()+'@'+Integer.toHexString(hashCode())
这在99.8%的时间里都没有用。通常,您希望读取类属性的值。为此,您需要重写toString()
您永远不知道何时要在调试框架之外查看其状态
如果您/其他人记录实例以查看其包含的内容,如果您不重写toString()
,则输出将仅为名称和哈希;这不是很有用
就我所知,性能方面根本不受影响,序列化(使用严肃的框架)也不受影响
我建议使用IDE的源代码生成功能来生成toString()
方法。它速度快,给你更多的控制权。听起来很有趣。谢谢Jon,所以toString()出现在对象类中。上面的代码块正在更改默认toString()实现的定义。并且可以根据我们的要求随时修改。我做得对吗?只有在调试模式或记录器中才需要知道实例的当前状态。我接受它。但是它与Object.toString()有什么区别呢?Object
类中提供的默认toString()
实现提供了一个由getClass().getName()+'@'+Integer.tohextString(hashCode())
组成的字符串,而这在99.8%的时间里是没有用处的。通常,您希望输出类的某些属性的值。已更新答案以包含该注释。很高兴我能帮忙!有用。谢谢你,希拉克。