JavaRush /Java Blog /Random-JA /Java で toString() メソッドをオーバーライドするための 10 のヒント (パート 2)
Ku6ep
レベル 35

Java で toString() メソッドをオーバーライドするための 10 のヒント (パート 2)

Random-JA グループに公開済み

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() メソッドを呼び出していることがわかります。

Rcrise IDE によって作成された toString() メソッド


デフォルトでは、Eclipse は次の toString メソッドを作成します。

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

Eclipse で toString メソッドのコードを生成するには、「ソース」 --> 「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 は、 toString() メソッドをいくつかの異なるスタイルで出力するコードを生成できる ToStringBuilder も提供します。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]

Google の同様のオープン ソース ライブラリであるGuavaも、Java で toString メソッドのコードを生成するための便利な API を提供します。

JavaでtoStringメソッドを呼び出した場合

toString はかなり特殊なメソッドであり、コレクションの印刷時や連結時に、 println() 、 printf()、ロギング、assert ステートメント、IDE デバッガなどの多くの JavaAPI メソッドから呼び出されます。サブクラスが toString() をオーバーライドしない場合は、Object クラスで定義されたデフォルトの実装が呼び出されます。多くの開発者は、Log4J や java.util.Logger などのログ API を使用してログを出力しますが、ここでオブジェクトを見逃すことがよくあります。

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

Customer が toString をオーバーライドせず、customerId、customerName などの重要な情報を出力しない場合。その場合、問題を診断するのは非常に困難になります。これが、Java で toString をオーバーライドする価値がある理由です。これを実行した場合の利点をいくつか見てみましょう。

toString メソッドをオーバーライドする利点

  1. 上で説明したように、適切にオーバーライドされた toString は、重要な情報を出力することでデバッグに役立ちます。
  2. 重要なオブジェクトがコレクションに保存されている場合、コレクションを印刷すると、保存されたオブジェクトの toString メソッドが呼び出され、重要な情報を印刷できます。オーバーライドされていない toString メソッドの古典的な例の 1 つは、Java の Array です。これは、配列の内容ではなくデフォルトの実装の結果を出力します。Arrays.toString() などを使用して配列の内容を出力する方法はいくつかありますが、ただし、 Array は Java オブジェクトであるため、 List や Set のようなコレクション クラスと同様に、それ自体を出力する方法を知っていればより良いでしょう。

これらはJava で toString メソッドを実装またはオーバーライドすることによって得られる利点のほんの一部であり、実際に得て学習できる利点は他にもたくさんあります。これらのヒントが toString 実装を最大限に活用するのに役立つことを願っています。Java アプリケーションで役立つ、toString を操作する独自の方法をご存知の場合はお知らせください。

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION