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

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

已在 Random-ZH 群组中发布

Java 中的 toString 示例

我们将使用以下类来演示 Netbeans、Eclipse 和 Apache 的 ToStringBuilder 实用程序的 toString 示例。

/** * Java программа, демонстрирующая How переопределить метод toString() в Java. * Эта Java программа показывает How вы можете использовать IDE типа Netbeans or Eclipse * и открытую библиотеку типа Apache commons ToStringBuilder для * переопределения toString в Java. * @author Javarevisited.blogspot.com */ public class Country { private String name; private String capital; private long population; private Date independenceDay; public Country(String name){ this.name = name; } public String getName(){ return name; } public void setName(String name) {this.name = name;} public String getCapital() {return capital;} public void setCapital(String capital) {this.capital = capital;} public Date getIndependenceDay() {return independenceDay;} public void setIndependenceDay(Date independenceDay) {this.independenceDay = independenceDay;} public long getPopulation() { return population; } public void setPopulation(long population) {this.population = population; } @Override public String toString() { return "Country{" + "capital=" + capital + ", population=" + population + ", independenceDay=" + independenceDay + '}'; } public void setIndependenceDay(String date) { DateFormat format = new SimpleDateFormat("dd/MM/yyyy"); try { this.independenceDay = format.parse(date); } catch (ParseException ex) { Logger.getLogger(Country.class.getName()).log(Level.SEVERE, null, ex); } } public static void main(String args[]) { Country India = new Country("India"); India.setCapital("New Delhi"); India.setIndependenceDay("15/07/1947"); India.setPopulation(1200000000); System.out.println(India); } }

Netbeans IDE 创建的 toString 方法


Netbeans IDE 生成的 toString 方法为上面定义的类生成以下输出:

Country{capital=New Delhi, population=1200000000, independenceDay=Fri Aug 15 00:00:00 VET 1947}

如果您查看上面的输出,您将看到 Netbeans 没有为您创建格式化日期:相反,它正在调用 java.util.Date 类的 toString() 方法

Rclise IDE 创建的 toString() 方法


默认情况下,Eclipse 创建以下 toString 方法:

@Override public String toString() { return "Country [name=" + name + ", capital=" + capital + ", population=" + population + ", independenceDay=" + independenceDay + "]"; }

您可以通过单击“Source”-->“Generate toString()”在 Eclipse 中生成 toString 方法的代码。它还提供了几种可能性,比如选择代码风格,即使用串联操作数或StringBuilder等。下面是我们刚刚在 Eclipse 中创建的 toString() 方法的输出:

Country [name=India, capital=New Delhi, population=1200000000, independenceDay=Tue Jul 15 00:00:00 VET 1947]

使用 ToStringBuilder 重写 Java 的 toString() 方法

除了许多有用的类(例如PropertyUtils、 EqualsBuilder 或 HashCodeBuilder )之外,Apache 还提供了 ToStringBuilder ,它可以生成代码以多种不同样式输出 toString() 方法。让我们看看 toString 方法的输出在简单和多行样式中是什么样子: 简单样式:

India,New Delhi,1200000000,Fri Aug 15 00:00:00 VET 1947

多线样式:

test.Country@f0eed6[
 name=India
 capital=New Delhi
 population=1200000000
 independenceDay=Fri Aug 15 00:00:00 VET 1947
 ]

NO_FIELD_NAMES_STYLE(没有字段名称的样式)

test.Country@1d05c81[India,New Delhi,1200000000,Fri Aug 15 00:00:00 VET 1947]

SHORT_PREFIX_STYLE(短前缀样式)

Country[name=India,capital=New Delhi,population=1200000000,independenceDay=Fri Aug 15 00:00:00 VET 1947]

ToStringStyle.DEFAULT_STYLE(默认样式)

test.Country@1d05c81[name=India,capital=New Delhi,population=1200000000,independenceDay=Fri Aug 15 00:00:00 VET 1947]

Guava是 Google 的一个类似的开源库,它也提供了一个方便的 API,用于为 Java 中的 toString 方法生成代码。

Java中调用toString方法时

toString 是一个相当具体的方法,在打印集合和连接时从许多 JavaAPI 方法调用,例如 println()、printf()、日志记录、断言语句、IDE 调试器。如果子类没有重写 toString(),则调用 Object 类中定义的默认实现。许多开发人员使用 Log4J 或 java.util.Logger 等日志记录 API 来输出日志,但经常会错过这里的 Object。

logger.info("Customer not found:" + customer)

如果 Customer 没有重写 toString 并输出重要信息,如 customerId、customerName 等。那么诊断问题就会变得相当困难。这就是为什么在 Java 中重写 toString 总是值得的。让我们看一下这样做的一些好处。

重写 toString 方法的好处

  1. 如上所述,正确重写的 toString 通过打印出重要信息来帮助调试
  2. 如果一个重要的对象存储在一个集合中,那么打印该集合会调用存储对象的toString方法,该方法可以打印出重要信息。不可重写 toString 方法的一个典型示例是 Java 中的 Array,它打印默认实现的结果而不是数组的内容。尽管有多种方法可以使用 Arrays.toString() 等打印数组的内容;但由于 Array 是一个 Java 对象,如果它知道如何打印自身会更好,就像List 或 Set等集合类一样。

这些只是通过在 Java 中实现或重写 toString 方法获得的一些好处,您还可以自己获得和学习更多好处。我希望这些技巧可以帮助您充分利用 toString 实现。如果您知道使用 toString 的任何独特方法可以帮助您开发 Java 应用程序,请告诉我们。

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