Open10

Javaの言語仕様を確認する

nmemotonmemoto

SealedクラスとSealedインタフェース

JEP 409

nmemotonmemoto

Sealedクラス: 継承を制限されたクラス
sealed, non-sealed, finalキーワード: クラスの継承可否の制御

permitsに指定されていないクラスを継承実装しようとすると、以下のように怒られた。

The type Dog extending a sealed class Shape should be a permitted subtype of Shape

nmemotonmemoto

Recordクラス

JEP 395

nmemotonmemoto

https://docs.oracle.com/javase/jp/16/language/records.html がわかりやすい

上記で気になった内容は以下。

  • インスタンス変数またはインスタンス・イニシャライザは、レコードクラスでは宣言できない。
  • ネストされたレコード・クラスと同様に、ローカル・レコード・クラスは暗黙的に静的です。つまり、静的でないローカル・クラスとは異なり、独自のメソッドは包含するメソッドの変数にアクセスできません。
    • メソッド内部で定義されるレコードクラスをローカル・レコード・クラスと呼ばれる。
    • 私はよく理解できなかったのでこれについてChatGPTに聞いてみた。https://chat.openai.com/share/6fe648bb-a4ae-48da-8b97-66591fcdab5f
      • 要は外部クラスのインスタンス変数にアクセスできないということ。