本文へスキップ
BecomeCoder

Javaオブジェクト指向コース · 第7章 例外・enum・record ― エラーと向き合い、データを簡潔に表す · レッスン30

record ― データの入れ物を簡潔に書く

ブラウザで完結

導入

「名前と点数を持つだけ」のような、ちょっとしたデータのまとまりを表したいだけなのに、フィールド・コンストラクタ・表示用のメソッドを毎回すべて手で書くのは面倒です。そんなときのための、データ専用のクラスを簡潔に書ける仕組みが record です。

説明

record 名前(フィールドの型 フィールド名, ...) { } と書くだけで、フィールドとコンストラクタを自動で持つクラスが作れます。

public class Main {
    public static void main(String[] args) {
        Point p = new Point(3, 4);
        System.out.println(p);
        System.out.println(p.x + ", " + p.y);
    }
}

record Point(int x, int y) {
    @Override
    public String toString() {
        return "Point[x=" + x + ", y=" + y + "]";
    }
}
  • record Point(int x, int y) { ... }xy という2つのフィールドと、両方を受け取るコンストラクタが自動で作られます。new Point(3, 4) だけでインスタンスが作れます。
  • p.xp.y … フィールドに直接アクセスして値を取り出せます。
  • toString() をオーバーライドすると、println(p) としたときの表示形式を自分で決められます(本物のJavaでは x()y() というアクセサメソッドや toString() も自動で生成されますが、この学習用シミュレータでは簡略化されているため、フィールドへの直接アクセスと、表示用の toString() を自分で書く形で使います)。

recordは、普通のクラスのように振る舞い(メソッド)を追加することもできますが、主な用途は「ただのデータの入れ物」を簡潔に表すことです。

やってみよう

下のエディタで Point にもう1つフィールド(例えば z)を追加してみましょう。

演習

record Student(String name, int score) {} を作り、toString() をオーバーライドして 名前: 点数点(例:さき: 90点)の形式で表示するようにしてください。mainnew Student("さき", 90) を作り、println で表示してください。

ヒント1を見る

record Student(String name, int score) { @Override public String toString() { return name + ": " + score + "点"; } }

ヒント2を見る

mainStudent s = new Student("さき", 90); System.out.println(s);

実際に動かしてみよう

下のエディタにJavaを書いて「実行」を押すと、学習用シミュレータが System.out.println の出力を表示します(本物のJVMではなく、教材の範囲を再現した軽量エンジンです)。クラス・継承・コレクションなども動きます。Scanner で入力を読む例は「標準入力」欄に値を入れてください。本文の例を書き換えて動かしてみましょう(Stream・ラムダ・スレッド・ファイル入出力など一部の機能は対象外です)。

Java — ブラウザ内で実行(学習用シミュレータ)

Javaの教材サブセットを動かす学習用シミュレータを読み込みます(本物のJVMではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。