JavaRush /Java 博客 /Random-ZH /在 Java 中重写 toString() 方法的 10 个技巧(第 1 部分)
Ku6ep
第 35 级

在 Java 中重写 toString() 方法的 10 个技巧(第 1 部分)

已在 Random-ZH 群组中发布
在 Java 中重写 toString() 方法的 10 个技巧 - ToStringBuilder Netbeans Eclipse 在 Java 中重写 toString() 方法的 10 个技巧(第 1 部分) - 1

Java toString 方法

toStringJava 中的方法用于Object以人类可读的形式提供有关对象 () 的清晰且充分的信息。正确的方法重写toString可以通过提供有价值且重要的信息来帮助记录调试Java 程序。由于toString()它是在java.lang.Object类中定义的,并且其默认实现不提供太多信息,因此最佳实践始终是在后代类中重写此方法。事实上,如果您正在创建OrderTrade或类型的重要或通用类Employee,请始终重写Java 中的equalshashCodeCompareTo和方法。toString默认情况下,实现以toString形式生成输出,package.class@hashCode例如,对于我们的示例,类方法将打印 test.Country@18e2b22,其中 18e2b22 是对象的十六进制哈希码,如果调用hashCode方法,它将返回 260943370,这是十进制相当于 18e2b22。在搜索问题时,此信息并不是特别有用。让我们看一个现实生活中的示例,您需要查找网络连接中的问题,如果您想知道系统正在尝试连接到哪个主机和端口,并且是否或仅打印默认信息,它将是无法想象真正的问题,但通过重写的实现,它们可以提供有用的信息,例如主机名和端口号。在本 Java 教程中,我们将通过代码示例给出一些有关方法重写的技巧。 toString()toString()CountrySocketServerSockettoStringtoStringtoString

如何在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 ,那么使用StringBuilderand 方法append()而不是 + 运算符进行组合toString也是一种可行的方法。默认情况下,Eclipse 和 Netbeans 都toString使用串联运算符生成。

使用@Override注解

在 Java 中使用@Override方法重写是该语言的最佳实践之一。但这个提示并不像重写equals()and方法那样重要compareTo(),因为重载而不是重写可能会产生更难以计算的微妙错误。无论如何,最好使用注释@Overrride

打印数组的内容而不是打印数组对象

数组是 Java 中的一个对象,但它不会覆盖方法toString,并且当您打印数组时,默认输出格式不是很有用,因为我们希望查看数组的内容。顺便说一句,这也是char[] 数组比 String 更适合存储密码等敏感数据的另一个原因。花点时间看看打印数组的内容是否对您的客户有帮助,如果有意义,则打印数组的内容而不是对象本身。出于性能原因,最好使用Collection此类ArrayListHashSet来代替Array存储其他对象。

额外提示

关于 Java 中方法重写的一些额外提示toString
  1. toString根据输出的长度以多行或一行打印输出。

  2. 在表示中包含完全限定的类名toString,换句话说,package.class以避免任何误解。

  3. 您可以跳过空值或显示它们,但最好显示它们。有时它们很有用,因为它们显示在某些事件期间存在哪个字段null,例如NullPointerException

  4. 使用键值格式,例如member.name=member.value,大多数 IDE 都支持这种格式。

  5. 如果您认为继承的成员应该向继承类提供必要的信息,请包括它们。

  6. 有时,一个对象包含许多可选和必需的参数,正如我们在Builder 模板示例中所示,当几乎不可能打印所有字段时,在这种情况下,我们只能打印必需的字段,特别是因为我们有可选字段。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION