コンパクトコンストラクタ
このコードを実行するとどうなるか。
public class Main {
public static void main(String[] args) {
Age a = new Age(-1);
System.out.println(a.value());
}
}
record Age(int value) {
Age {
if (value < 0) {
throw new IllegalArgumentException("negative");
}
}
}
- A
-1と出力される - B
0と出力される - C 実行時に例外が発生する
- D コンパイルエラーになる
正解と解説を見る
正解: C
- A: コンパクトコンストラクタで例外を投げるので、record は作られません。
- B: -1 は受け付けられず、0 に直されることもありません。
- C: -1 はチェックに引っかかって IllegalArgumentException が投げられます。
- D: コンパクトコンストラクタの書き方は正しいので、コンパイルできます。
ポイント
- 引数リストを書かない
Age { ... }はコンパクトコンストラクタで、値のチェックなどに使います。 - フィールドへの代入は最後に自動で行われます。