JavaRush /Java Blog /Random-TW /在 Java 中重寫 toString() 方法的 10 個技巧(第 2 部分)
Ku6ep
等級 35

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

在 Random-TW 群組發布

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