導入
「名前と点数を持つだけ」のような、ちょっとしたデータのまとまりを表したいだけなのに、フィールド・コンストラクタ・表示用のメソッドを毎回すべて手で書くのは面倒です。そんなときのための、データ専用のクラスを簡潔に書ける仕組みが 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) { ... }…xとyという2つのフィールドと、両方を受け取るコンストラクタが自動で作られます。new Point(3, 4)だけでインスタンスが作れます。p.x、p.y… フィールドに直接アクセスして値を取り出せます。toString()をオーバーライドすると、println(p)としたときの表示形式を自分で決められます(本物のJavaではx()・y()というアクセサメソッドやtoString()も自動で生成されますが、この学習用シミュレータでは簡略化されているため、フィールドへの直接アクセスと、表示用のtoString()を自分で書く形で使います)。
recordは、普通のクラスのように振る舞い(メソッド)を追加することもできますが、主な用途は「ただのデータの入れ物」を簡潔に表すことです。
やってみよう
下のエディタで Point にもう1つフィールド(例えば z)を追加してみましょう。
演習
record Student(String name, int score) {} を作り、toString() をオーバーライドして 名前: 点数点(例:さき: 90点)の形式で表示するようにしてください。main で new Student("さき", 90) を作り、println で表示してください。
ヒント1を見る
record Student(String name, int score) { @Override public String toString() { return name + ": " + score + "点"; } }。
ヒント2を見る
main で Student s = new Student("さき", 90); System.out.println(s);。