ホームページ >Java >&#&チュートリアル >「フレンド」概念を使用せずに、Java でプライベート メソッドへの制限付きアクセスを実現するにはどうすればよいですか?

「フレンド」概念を使用せずに、Java でプライベート メソッドへの制限付きアクセスを実現するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-12 11:50:02604ブラウズ

How Can I Achieve Limited Access to Private Methods in Java Without Using the

Java でプライベート メソッドへの制限付きアクセスを提供する

Java では、C の「フレンド」概念を直接複製することはできません。クラスのプライベート メンバーから外部エンティティへのアクセス。ただし、別の手法を使用しても、同様の動作を実現できます。

Love Signature アプローチ

制御されたアクセスを実現するための賢いアプローチの 1 つは、「秘密」署名を使用することです。その仕組みは次のとおりです。

  1. あるパッケージ内に、別のパッケージ内のプライベート メソッドにアクセスするために必要な「秘密の署名」を表すパブリック クラスを作成します。この署名クラスには、排他性を確保するためのプライベート コンストラクターを含めることができます。
  2. プライベート メンバーへのアクセスが必要なクラスでは、署名クラスのインスタンスをパラメーターとして受け入れるパブリック メソッドを定義します。
  3. 他のパッケージのパブリック メソッドの場合、シグネチャ クラス インスタンスは、

例:

異なるパッケージの 2 つのクラス、Romeo と Juliet について考えます。 Romeo は、Juliet をサブクラスにせずに、Juliet のプライベート メソッドにアクセスする必要があります。

Juliet のコード:

// Capulet package
public class Juliet {

    public static void cuddle(Romeo.Love love) {
        Objects.requireNonNull(love);
        // Juliet's private methods can be accessed here.
    }
    
}

Romeo.Love は、プライベート コンストラクターを持つパブリック クラスです。 Romeo だけがインスタンスを作成できるようにします。

Romeo のコード:

// Montague package
public class Romeo {

    public static final class Love { private Love() {} }
    private static final Love love = new Love();

    public static void cuddleJuliet() {
        Juliet.cuddle(love);
    }
}

このアプローチは、署名クラス コンストラクターの排他性を利用して、カプセル化とプライバシーを維持しながら、必要なメソッドへの選択的なアクセスを許可します。

以上が「フレンド」概念を使用せずに、Java でプライベート メソッドへの制限付きアクセスを実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。