record の基本
出力はどれか。
public class Main {
public static void main(String[] args) {
Point p = new Point(1, 2);
System.out.println(p.x() + " " + p + " " + p.equals(new Point(1, 2)));
}
}
record Point(int x, int y) {
}
- A
1 Point[x=1, y=2] true - B
1 Point@1b6d3586 false - C
1 (1, 2) true - D コンパイルエラーになる
正解と解説を見る
正解: A
- A: アクセサ x() は 1、toString は
Point[x=1, y=2]、equals は全フィールドを比べて true です。 - B: record は toString と equals が自動で作られるので、
Point@...や false にはなりません。 - C: record の toString は
型名[フィールド名=値, ...]の形です。 - D: record の宣言とアクセサの呼び出しは正しい書き方です。
ポイント
- record を宣言すると、private final のフィールド、コンストラクタ、アクセサ
x()、equals・hashCode・toString が自動で作られます。