ホームページ >Java >&#&チュートリアル >Java で C の「フレンド」概念をシミュレートするにはどうすればよいでしょうか?

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

Susan Sarandon
Susan Sarandonオリジナル
2024-11-11 05:48:03430ブラウズ

How Can You Simulate C  's 'friend' Concept in Java?

Java での C の「フレンド」概念のシミュレーション

Java は、クラスを許可する C で見られるような明示的な「フレンド」概念を提供しません。さまざまなパッケージから非公開メンバーにアクセスします。ただし、この動作を複製するために賢いテクニックを使用できます。

Java での C 'friend' の複製

2 つのクラス、Romeo と Juliet が別々のパッケージにあると考えてください。ジュリエットは、自分のメソッドへのアクセスをロミオに制限したいと考えています。 C では、これは、ロミオをジュリエットの「友達」として宣言することで実現できます。

Java では、プライベート コンストラクターと静的参照を使用することで、同様の効果を実現できます。

  1. Juliet の cuddle メソッドはパブリックになりますが、Romeo.Love 引数が必要です:
public static void cuddle(Romeo.Love love) {
    if (love == null) throw new NullPointerException();
    System.out.println("O Romeo, Romeo, wherefore art thou Romeo?");
}
  1. Romeo はプライベート コンストラクターを使用してパブリック静的入れ子クラス Love を定義します:
public static final class Love { private Love() {} }

Romeo だけが Romeo.Love インスタンスを構築できます。次に、Romeo は静的な最終 Romeo.Love 参照を作成します:

private static final Love love = new Love();
  1. Romeo の cuddleJuliet メソッド:
public static void cuddleJuliet() {
    Juliet.cuddle(love);
}

アクセス権があるため、Romeo だけが Juliet の cuddle メソッドを実行できます。 Romeo.Love インスタンスに。コンストラクターがプライベートであるため、他のクラスは Romeo.Love をインスタンス化できません。

この手法により、他のクラスからのアクセスを制限しながら、ロミオがジュリエットの cuddle メソッドにアクセスできるようになり、ジュリエットがロミオのみを信頼する Java の「友達」の概念を効果的にシミュレートできます。 .

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

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