「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 「フレンド」概念を使用せずに、Java でプライベート メソッドへの制限付きアクセスを実現するにはどうすればよいですか?

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

2024 年 11 月 10 日に公開
ブラウズ:268

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

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

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

愛の署名アプローチ

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

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

例:

異なるパッケージの 2 つのクラス、Romeo と 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);
    }
}

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

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3