Java で C の「フレンド」概念を複製できますか?
Java では、通常、1 つのパッケージ内のクラスを複製することはできません別のパッケージ内のクラスの非パブリック メンバーにアクセスします。ただし、この動作をシミュレートするために使用できるトリックがあります。
トリック
このトリックには、プライベート コンストラクターでネストされたクラスを使用することが含まれます。この入れ子になったクラスは、アクセスを制限するメソッドの「シグネチャ セキュリティ」として機能します。以下に例を示します。
// Package: capulet public class Juliet { public static void cuddle(Romeo.Love love) { // Check that the love is real (null check) Objects.requireNonNull(love); // Call the cuddle method System.out.println("O Romeo, Romeo, wherefore art thou Romeo?"); } }
// Package: montague public class Romeo { // Nested class with private constructor public static final class Love { private Love() {} } // Static reference to the love class private static final Love love = new Love(); // Public method to cuddle Juliet using the nested class public static void cuddleJuliet() { Juliet.cuddle(love); } }
この例では、Romeo.Love クラスが Romeo クラス内にネストされており、プライベート コンストラクターがあります。これは、他のクラスが Romeo.Love のインスタンスを構築できないことを意味します。 Juliet クラスには、Romeo.Love のインスタンスをパラメータとして受け取る cuddle というパブリック メソッドがあります。
Romeo クラスだけが Romeo.Love のインスタンスを作成できるため、Romeo クラスだけが cuddle メソッドを呼び出すことができます。これにより、cuddle メソッドへのアクセスが Romeo クラスに効果的に制限され、C のフレンド概念の動作がシミュレートされます。
以上がJava は C の「フレンド」概念を再現できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。