Java Sealed クラスを使用した高度なクラス設計

DDD
リリース: 2024-11-03 01:51:03
オリジナル
419 人が閲覧しました

Advanced Class Design using Java Sealed Classes

はじめに

オブジェクト指向プログラミングでは、クラス設計は、堅牢で保守可能なコードを作成する上で重要な役割を果たします。 Java 15 のリリースでは、シールされたクラスと呼ばれる新機能が導入され、クラス設計に制御とセキュリティの追加レイヤーが追加されました。シールされたクラスを使用すると、開発者はクラス階層を制限し、外部クラスがクラス階層を拡張したり実装したりするのを防ぐことができます。この記事では、シールド クラスの概念、その利点、Java での実装方法について説明します。

シールされたクラスとは何ですか?

シールされたクラスは、Java 15 で導入された新しいタイプのクラスで、サブクラスの継承と実装を制限します。これは、特定のクラスのみが拡張または実装できるようにする、密閉されたコンテナーと考え​​ることができます。クラスがシール済みとして宣言されると、そのクラスはデフォルトで Final となり、外部クラスによってそのクラスを拡張または実装しようとすると、コンパイル エラーが発生します。

シールされたクラスを使用する利点

1.セキュリティの強化: シールされたクラスは、サブクラスの継承と実装を制限することにより、追加のセキュリティ層を提供します。これにより、コア クラスの不正な変更が防止され、信頼できるサブクラスのみがシールされたクラスにアクセスして変更できるようになります。

2.クラス階層の制御の向上: シールされたクラスを使用すると、開発者はクラス階層をより適切に制御できます。許可されるサブクラスを明示的に定義することで、関連性があり適切に設計されたクラスのみがシールされたクラスを拡張または実装できるようになり、コードベースの保守性が向上します。

3.コードの柔軟性の向上: シールされたクラスを拡張または実装できるサブクラスを制限することで、外部コードの破損を心配することなく、必要な変更やリファクタリングを行うことができます。これにより、シールされたクラスを操作する際に柔軟性がもたらされ、コードベースの安定性と保守性が確保されます。

Sealed クラスの実装

クラスをシール済みとして宣言するには、以下に示すようにクラス宣言で 'sealed' キーワードを使用します。

//Sealed class declaration
public sealed class Triangle permits EquilateralTriangle, RightAngleTriangle {

    //Class body
}
ログイン後にコピー
ログイン後にコピー

ここでは、「permits」キーワードを使用して、シールされたクラスの拡張が許可されるサブクラスを指定します。上の例では、クラス「EquiliteralTriangle」と「RightAngleTriangle」のみが「Triangle」クラスを拡張できます。

次に、「Triangle」クラスを拡張できるサブクラスを作成しましょう。

//Example of Subclass that Extends Sealed Class
public final class EquilateralTriangle extends Triangle {
    //Class body
}

//Example of Subclass that Extends Sealed Class
public non-sealed class RightAngleTriangle extends Triangle {
    //Class body
}
ログイン後にコピー
ログイン後にコピー

「Equi LateralTriangle」クラスは、継承階層の最後のサブクラスであるため「final」として宣言されており、「RightAngleTriangle」クラスは、さらなるサブクラスによる拡張が可能であるため「non-sealed」として宣言されていることに注意してください。

次に、シールされたインターフェイスの実装例を見てみましょう。インターフェースは、シールされたクラスと同じ構文を使用してシールされたものとして宣言できます。

//Sealed class declaration
public sealed class Triangle permits EquilateralTriangle, RightAngleTriangle {

    //Class body
}
ログイン後にコピー
ログイン後にコピー

ここでは、「permits」キーワードを使用して、シールされたインターフェイスの実装を許可されるクラスを指定します。上記の例では、クラス「Rectangle」と「Circle」のみが「Shape」インターフェイスを実装できます。

//Example of Subclass that Extends Sealed Class
public final class EquilateralTriangle extends Triangle {
    //Class body
}

//Example of Subclass that Extends Sealed Class
public non-sealed class RightAngleTriangle extends Triangle {
    //Class body
}
ログイン後にコピー
ログイン後にコピー

「Rectangle」クラスは、「Shape」インターフェースを実装する最後のクラスであるため「final」として宣言されており、「Circle」クラスは、その後のクラスで次のことを可能にするため「non-sealed」として宣言されていることに注意してください。それを実装してください。

シールされたクラスとインターフェースの継承ルール

  1. シールされたクラスは、それを拡張できるサブクラスを明示的に許可する必要があります。
  2. 許可されるすべてのサブクラスは、sealed クラスの直接のサブクラスである必要があります。これは、許可されていないサブクラスを拡張して、シールされたクラスの間接サブクラスを作成することはできないことを意味します。
  3. シールされたインターフェイスは、それを実装できるクラスを明示的に許可する必要があります。
  4. 許可されたすべてのクラスは、すべてのインターフェイス メソッドを実装する必要があります。これは、シールされたインターフェイスを部分的に実装するクラスを作成できないことを意味します。

結論

Sealed クラスは Java への強力な追加機能であり、クラス設計を大幅に強化し、コードベースをより安全で保守しやすくします。クラスとインターフェイスの階層を制限することにより、シールされたクラスは、クラスの設計時に追加の制御層と柔軟性を提供します。この新機能を使用すると、開発者は信頼できるサブクラスまたは実装クラスのみがシールされたクラスにアクセスして変更できるようにすることができ、より安定した堅牢なコードベースが実現します。最新の Java 認定資格を取得して Java スキルを向上させます。

以上がJava Sealed クラスを使用した高度なクラス設計の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート