record のフィールドを書き換える
このコードを実行するとどうなるか。
public class Main {
public static void main(String[] args) {
Point p = new Point(1, 2);
p.x = 5;
System.out.println(p);
}
}
record Point(int x, int y) {
}
- A
Point[x=5, y=2]と出力される - B 実行時に例外が発生する
- C コンパイルエラーになる
- D
Point[x=1, y=2]と出力される
正解と解説を見る
正解: C
- A: 実行まで進まないので、何も出力されません。
- B: フィールドへのアクセスの誤りはコンパイル時に見つかります。
- C: record のフィールドは private final なので、外から代入できずコンパイルエラーです。
- D: 実行まで進まないので、何も出力されません。
ポイント
- record のフィールドは private final です。外から直接触れず、値を変えることもできません。
- 値を変えたいときは、新しい record を作ります。