toString() メソッド
CoddyのJavaジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 41/87。
Java のすべての class は、いくつかの便利な method を提供する Object class を継承します。最も一般的に Override される method の 1 つが toString() で、object の文字列表現を返します。
デフォルトでは、toString()はクラス名に続いてオブジェクトのハッシュコードを返しますが、あまり役に立ちません。
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
Person p = new Person("Alice", 25);
System.out.println(p); // Person@15db9742toString() をオーバーライドすることで、オブジェクトの状態を説明する意味のある出力を提供できます。
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person[name=" + name + ", age=" + age + "]";
}
}
Person p = new Person("Alice", 25);
System.out.println(p); // Person[name=Alice, age=25]toString()メソッドは、オブジェクトを出力したり、文字列と連結したりすると自動的に呼び出されます。これにより、追加のコードを書かなくてもオブジェクトの内容をすぐに確認できるため、デバッグがはるかに簡単になります。
チャレンジ
簡単カスタムなtoString()実装を使用して、itemsに関する意味のある情報を表示するproduct inventory systemを構築しましょう。各productを明確で読みやすく表現できるよう、デフォルトのtoString() methodをOverrideするProduct classを作成します。
コードを2つのファイルに分けて整理します。
Product.java:inventory itemを表すclassをCreateします。各Productには3つのprivate fieldsがあります:name(String)、price(double)、quantity(int)。3つすべてのfieldsをinitializesするconstructorを含めます。toString()methodをOverrideし、次のexact formatのformatted stringをreturnします:Product[name=X, price=Y, quantity=Z]。ここでX、Y、Zはactual field valuesです。priceはplain numberとして表示されます(特別なformatは不要です)。Main.java:Product classをCreateして表示することで、実際に動作させます。3つのinputsを受け取ります:product name(String)、price(double)、quantity(int)。これらのvaluesを使用してProductをCreateし、その後System.out.println()を使用してproduct objectをdirectly Printします。OverrideしたtoString()methodのおかげで、crypticなデフォルト出力ではなく、formatted product informationがautomatically表示されます。
3つのinputsを受け取ります:product name(String)、price(double)、quantity(int)。
objectをdirectly Printすると、toString() methodがautomatically callされることに注目してください。これにより、実際のapplicationsでのdebuggingやloggingがはるかに簡単になります。
自分で試してみよう
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 入力を読み取る
String name = scanner.nextLine();
double price = scanner.nextDouble();
int quantity = scanner.nextInt();
// TODO: 入力値でProductオブジェクトを作成する
// TODO: productオブジェクトを直接出力する
// (これにより自動的にtoString()メソッドが呼び出されます!)
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
4継承
継承の基本 (extends)super キーワードメソッドのオーバーライド (@Override)コンストラクタチェーンObject クラス単一継承と多段階継承なぜ多重継承ができないのかまとめ:従業員の階層構造7特殊メソッドとObjectクラス
toString() メソッドequals() と hashCode()clone() メソッドcompareTo() と ComparableComparator インターフェースまとめ - カスタムソート自分で練習してみよう: Javaオンラインコンパイラ