Open10
Javaの言語仕様を確認する
SealedクラスとSealedインタフェース
ChatGPTに、Sealedクラスとsealed, non-sealed, finalキーワードについて聞いてみた。
Sealedクラス: 継承を制限されたクラス
sealed, non-sealed, finalキーワード: クラスの継承可否の制御
permitsに指定されていないクラスを継承実装しようとすると、以下のように怒られた。
The type Dog extending a sealed class Shape should be a permitted subtype of Shape
Sealedインタフェースは、Sealedクラスのインタフェース版。
JEP 409にSealedクラスの仕様がある。
Sealing and record classesにSealedクラスとレコードクラスの関係について書いてありそう。
Recordクラス
ChatGPTにレコードクラスについて聞いてみた
https://docs.oracle.com/javase/jp/16/language/records.html がわかりやすい
上記で気になった内容は以下。
- インスタンス変数またはインスタンス・イニシャライザは、レコードクラスでは宣言できない。
- ネストされたレコード・クラスと同様に、ローカル・レコード・クラスは暗黙的に静的です。つまり、静的でないローカル・クラスとは異なり、独自のメソッドは包含するメソッドの変数にアクセスできません。
- メソッド内部で定義されるレコードクラスをローカル・レコード・クラスと呼ばれる。
- 私はよく理解できなかったのでこれについてChatGPTに聞いてみた。https://chat.openai.com/share/6fe648bb-a4ae-48da-8b97-66591fcdab5f
- 要は外部クラスのインスタンス変数にアクセスできないということ。
ローカル変数の型推論
https://docs.oracle.com/javase/jp/21/language/local-variable-type-inference.html#GUID-D2C58FE6-1065-4B50-9326-57DD8EC358AC でローカル変数の型推論が効くパターンを紹介している。
Local Variable Type Inference: Style Guidelines でローカル変数の型推論を使う際のいい感じのスタイルを紹介している。