toString()メソッドとは、java.lang.Objectクラスで定義されている文字列表現を返すメソッドです。
全てのクラスはこのjava.lang.Objectクラスを継承しているため、必然的にどのクラスでもtoString()メソッドが定義されていることになります。
私たちは、無意識のうちにこのtoString()メソッドを使用していることが多々あります。
例えば以下のサンプルコードをご覧下さい。
使用例:
1 2 3 4 5 6 7 8 9 10 11 |
import java.util.HashMap; public class TestMain{ public static void main(String[] args){ HashMap<String, String> map = new HashMap<>(); map.put("key1", "value1"); map.put("key2", "value2"); map.put("key3", "value3"); System.out.println(map); } } |
出力結果:
{key1=value1, key2=value2, key3=value3}
java.util.HashMapのオブジェクトを生成し、値とキーを3つセットしています。
最後にprintln()メソッドの引数にjava.util.HashMapのオブジェクトを指定して、オブジェクト内の要素を確認するコードになっています。実はjava.lang.String以外の参照型が引数に指定された場合は、そのオブジェクトのtoString()メソッドで文字列が取得され出力されます。
つまり、
System.out.println(map.toString());
と記述しているのと同じ結果になります。
また、出力結果が上記のようになるのは、java.util.HashMapクラスでtoString()メソッドをオーバーライドして、上記の出力になるように文字列を返しているからです。
このようにオブジェクトの内容を文字列化するためのtoString()メソッドは、自作クラスでもオーバーライドすることができます。以下の例をご覧下さい。
使用例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public class TestBean{ private int id; private String name; private String address; public void setProperties(int id, String name, String address){ this.id = id; this.name = name; this.address = address; } @Override public String toString(){ return "TestBean[id=" + id + ", name=" + name + ", address=" + address + "]"; } } |
1 2 3 4 5 6 7 |
public class TestMain2{ public static void main(String[] args){ TestBean bean = new TestBean(); bean.setProperties(10, "KEN", "東京都"); System.out.println(bean); } } |
出力結果:
TestBean[id=10, name=KEN, address=東京都]
TestBeanクラスでもtoString()メソッドをオーバーライドします。そして、toString()メソッドの戻り値に表示したい文字列を返すように処理を記述します。
使用方法はjava.util.HashMapのオブジェクトと同様に、オブジェクト生成後、println()メソッドの引数にオブジェクトを渡すことにより、toString()メソッドが呼び出され、文字列が取得され出力されます。
オブジェクト指向では、カプセル化を用いてデータを保持することが多いため、toString()メソッドをオーバーライドしてフィールドを確認する方法は有用だと思います。