ホームページ  >  記事  >  Java  >  Java は C の「フレンド」概念を再現できますか?

Java は C の「フレンド」概念を再現できますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-10 05:07:02495ブラウズ

Can Java Replicate the C   'Friend' Concept?

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 サイトの他の関連記事を参照してください。

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