ホームページ > バックエンド開発 > C++ > C の「フレンド」機能を Java でシミュレートするにはどうすればよいですか?

C の「フレンド」機能を Java でシミュレートするにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-17 00:28:25
オリジナル
240 人が閲覧しました

How Can I Simulate C  's `friend` Functionality in Java?

Java での C 'friend' 概念のシミュレーション

Java の異なるパッケージのクラス間でプライベート メソッドへの直接アクセスを許可するには、次のことを考慮してください。次のテクニック:

ステップ 1: 「セキュリティ署名」を作成するClass

アクセスを必要とするクラスのパッケージ内で、「セキュリティ シグネチャ」として機能するパブリック クラスを定義します。このクラスは、そのパッケージ内でのみアクセスできる必要があります。

ステップ 2: コンストラクターを制限する

セキュリティ署名クラスのコンストラクターをプライベートにします。これにより、パッケージ内のクラスのみがインスタンスを作成できるようになります。

ステップ 3: 静的参照を作成する

セキュリティ署名クラス型の静的変数を宣言します。これにより、署名オブジェクトに簡単にアクセスできるようになります。

ステップ 4: ターゲット メソッドを定義する

制限付きアクセスを許可するクラスで、必要なメソッドを定義します。セキュリティ署名クラスを引数として指定します。このメソッドには、public や protected などの適切なアクセス許可が必要です。

例:

クラス Romeo (Montague パッケージ内) が非アクセス権にアクセスするシナリオを考えてみましょう。クラス Juliet の public メソッド (パッケージ内) Capulet).

Juliet.java:

package capulet;

public class Juliet {

    public void cuddle(Romeo.Love love) {
        if (love == null) {
            throw new NullPointerException();
        }
        System.out.println("O Romeo, Romeo, wherefore art thou Romeo?");
    }
}
ログイン後にコピー

Romeo.java:

package montague;

public class Romeo {

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

    public void cuddleJuliet() {
        Juliet.cuddle(love);
    }
}
ログイン後にコピー

この例では、クラス Romeo.Love はセキュリティ署名として機能します。民間コンストラクターのため、ロミオのみが建設できます。 Juliet の cuddle メソッドを実行するには、Romeo が提供できる Romeo.Love のインスタンスが必要です。これにより、Montague パッケージ外の他のクラスからの不正アクセスが防止されます。

以上がC の「フレンド」機能を Java でシミュレートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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