趣旨
例えば、レシピに関する情報とそれを処理するメソッドを集めたRecipeクラスがあるとします。
これは、レシピオブジェクトを作成する際に、レシピ名とレシピのカテゴリーを受け取ります。
public class Recipe {
final String name;
final String category;
public Recipe(String name, String category) {
this.name = name;
this.category = category;
}
public String getName() {
return this.name;
}
public String getCategory() {
return this.category;
}
}
ここで、生成したレシピオブジェクトの中身をデバッグして確認したいとなった場合、以下のように実行すると、
public class Recipe {
~割愛~
public static void main( String[] args) {
Recipe recipe = new Recipe("チャーハン", "中華");
System.out.println(recipe);
}
~割愛~
}
以下のような値が出力されます。
Recipe@1dbd16a6
ここで期待していたのは、オブジェクトの中身が確認できることだと思いますが、実はこのままだと、"レシピオブジェクト文字列として出力した際に、何をどのように出力すればよいのか"ということがプログラム側では判断がつきません。
解決策(toStringメソッドでオーバーライドする)
ObjectクラスのtoStrignメソッドでクラスファイル内にオーバーライドして明示的に定義してあげる必要があります。
toStrignメソッドとは
java.lang.Objectに実装されているメソッドで、すべてのクラスでオーバーライド可能なメソッドです。そのインスタンスの文字列表現を返すメソッドなのですが、特にオーバーライドしていない場合デフォルトメソッド(Objectクラスに実装されているtoString)が呼ばれます。
(全てのクラスはObjectクラスを継承しているため、結果的にオーバーライドしていることになります)
実装
Vscodeであれば、右クリックメニューから、ソースアクションを選択し、
Generate toStringを選択します
このオブジェクトを文字列として出力する際に表示したいフィールドを選択し、OK
そうすると、以下のようにObjectクラスのtoStrignメソッドをオーバーライドしたtoStringメソッドが出来上がります。
public class Recipe {
~割愛~
public Recipe(String name, String category) {
this.name = name;
this.category = category;
}
public String getName() {
return this.name;
}
public String getCategory() {
return this.category;
}
@Override
public String toString() {
return "Recipe [category=" + this.category + ", name=" + this.name + "]";
}
}
再度コンソールに出力すると、無事オブジェクトの中身が確認できました!
Recipe [category=中華, name=チャーハン]
オブジェクト文字列として出力した際の内容を明示的にしてあげることで、上記のようにオブジェクトの中身を出力した際に中身を確認することができます。
※toStringメソッドの返り値の型は文字列型なので、"" + this.hoge + ""のように文字列として返してあげる必要があります。
以上です。
まとめ
いかがでしたでしょうか。本記事では、【Java】toString()でオブジェクトの情報を明示的にする方法について紹介しています。オブジェクト文字列として出力した際の内容を明示的にしてあげることで、オブジェクトの中身を出力した際に中身を確認することができます。