在 Java 中重写 toString() 方法的 10 个技巧 - ToStringBuilder Netbeans Eclipse
Java toString 方法
toString
Java 中的方法用于Object
以人类可读的形式提供有关对象 () 的清晰且充分的信息。正确的方法重写toString
可以通过提供有价值且重要的信息来帮助记录和调试Java 程序。由于toString()
它是在java.lang.Object
类中定义的,并且其默认实现不提供太多信息,因此最佳实践始终是在后代类中重写此方法。事实上,如果您正在创建Order
、Trade
或类型的重要或通用类Employee
,请始终重写Java 中的equals、hashCode、CompareTo和方法。toString
默认情况下,实现以toString
形式生成输出,package.class@hashCode
例如,对于我们的示例,类方法将打印 test.Country@18e2b22,其中 18e2b22 是对象的十六进制哈希码,如果调用hashCode方法,它将返回 260943370,这是十进制相当于 18e2b22。在搜索问题时,此信息并不是特别有用。让我们看一个现实生活中的示例,您需要查找网络连接中的问题,如果您想知道系统正在尝试连接到哪个主机和端口,并且是否或仅打印默认信息,它将是无法想象真正的问题,但通过重写的实现,它们可以提供有用的信息,例如主机名和端口号。在本 Java 教程中,我们将通过代码示例给出一些有关方法重写的技巧。 toString()
toString()
Country
Socket
ServerSocket
toString
toString
toString
如何在Java中重写toString方法:
打印格式化日期(即日/月/年)而不是原始值。当重写 Java 方法时,这是一个非常有用的提示toString
。常规toString()
类java.util.Date
不会输出格式化日期,并且包含许多并不总是需要的详细信息。如果您使用部分DateFormat即 dd-MM-yy 在您的应用程序中,那么您肯定希望看到这种格式而不是默认格式。IDE 通常不会生成格式化输出Date
,这是您需要自己做的事情,但这是值得的。有关 Java 格式化的详细信息,请阅读如何在 Java 中以 ddMMyy 格式打印日期Date
。您还可以使用SimpleDataFormat类或 Joda Date 时间库来实现此目的。
记录 toString 格式
如果您的方法toString()
不将数据输出为 field=value,那么最好记录输出格式toString
,特别是对于 Employee 或 Student 等重要对象。例如,如果toString()
类方法Работник(Employee)
打印“ John-101-Sales-9846387321 ”,那么一个好的做法是将格式指定为“name-id-department-contact”,但同时不允许客户端获取从方法中获取信息,您应该始终提供适当的方法来检索数据,toString()
例如getName()
,,等等,因为从对象表示中获取的信息是脆弱且容易出错的,因此客户端应该始终有一个干净的路径来获取信息。 getId()
getContact()
toString()
使用 StringBuilder 组合 toString() 的输出
如果您正在为 Java 中的方法编写代码toString()
,请使用StringBuilder添加单独的属性。如果您使用的是Eclipse、Netbeans 或 IntelliJ等 IDE ,那么使用StringBuilder
and 方法append()
而不是 + 运算符进行组合toString
也是一种可行的方法。默认情况下,Eclipse 和 Netbeans 都toString
使用串联运算符生成。
使用@Override注解
在 Java 中使用@Override
方法重写是该语言的最佳实践之一。但这个提示并不像重写equals()
and方法那样重要compareTo()
,因为重载而不是重写可能会产生更难以计算的微妙错误。无论如何,最好使用注释@Overrride
。
打印数组的内容而不是打印数组对象
数组是 Java 中的一个对象,但它不会覆盖方法toString
,并且当您打印数组时,默认输出格式不是很有用,因为我们希望查看数组的内容。顺便说一句,这也是char[] 数组比 String 更适合存储密码等敏感数据的另一个原因。花点时间看看打印数组的内容是否对您的客户有帮助,如果有意义,则打印数组的内容而不是对象本身。出于性能原因,最好使用Collection
此类ArrayList
或HashSet来代替Array
存储其他对象。
额外提示
关于 Java 中方法重写的一些额外提示toString
。
-
toString
根据输出的长度以多行或一行打印输出。 -
在表示中包含完全限定的类名
toString
,换句话说,package.class
以避免任何误解。 -
您可以跳过空值或显示它们,但最好显示它们。有时它们很有用,因为它们显示在某些事件期间存在哪个字段
null
,例如NullPointerException。 -
使用键值格式,例如
member.name=member.value
,大多数 IDE 都支持这种格式。 -
如果您认为继承的成员应该向继承类提供必要的信息,请包括它们。
-
有时,一个对象包含许多可选和必需的参数,正如我们在Builder 模板示例中所示,当几乎不可能打印所有字段时,在这种情况下,我们只能打印必需的字段,特别是因为我们有可选字段。
GO TO FULL VERSION