ホームページ  >  記事  >  Java  >  Java はパッケージ間アクセスに関して C の「フレンド」概念を模倣できますか?

Java はパッケージ間アクセスに関して C の「フレンド」概念を模倣できますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-08 07:23:02828ブラウズ

Can Java Mimic C  's 'Friend' Concept for Cross-Package Access?

C の「フレンド」概念を Java で複製する

オブジェクト指向プログラミングでは、「フレンド」概念により、さまざまなパッケージ内のクラスが次のことを行うことができます。お互いの非パブリックメソッドにアクセスします。 C では、この機能は 'friend' キーワードによって実現されます。

課題:

Java では、'friend' 概念に直接相当するものはありません。 Java プログラマーはこの機能を複製して、非パブリック メソッドへのパッケージ間アクセスを許可できますか?

解決策:

Java には組み込みの「フレンド」がありませんが、

ネストされたクラスによる署名セキュリティ:

共有シークレットまたは ' を表す各ターゲット クラス内にネストされたクラスを作成します。サイン。'これらのクラスは、コンストラクターへのアクセスが制限されており、承認されたインスタンスのみを作成できるようにしています。

例:

異なるパッケージの 2 つのクラス、Romeo と Juliet について考えてみましょう。ロミオがジュリエットの非パブリック メソッドにアクセスできるようにするために、ジュリエットはプライベート コンストラクターを使用してネストされたクラス TrueLove を宣言します。

// Juliet
public class Juliet {
    private static class TrueLove {}

    public void cuddle(TrueLove love) {
        // Access to this method is restricted to Romeo through the TrueLove instance
    }
}

署名へのアクセスの制限:

ロミオパブリック コンストラクターを使用して、独自のネストされたクラス Proposal を定義します。ただし、ジュリエットの TrueLove クラスへの静的参照もあり、署名への制御されたアクセスが提供されます。

// Romeo
public class Romeo {
    private static class Proposal {
        private static final TrueLove love = new TrueLove();
    }

    public static void cuddleJuliet() {
        Juliet.cuddle(Proposal.love);
    }
}

検証とセキュリティ:

ロミオが cuddleJuliet( )、Proposal.love のインスタンスを渡し、Juliet の非パブリック メソッドにアクセスする権限を検証します。他のクラスが TrueLove に直接アクセスしようとすると、プライベート コンストラクターが原因で失敗し、セキュリティが確保されます。

この手法を使用すると、Java プログラマーは、ネストされたクラスを使用して共有へのアクセスを制限することにより、C の「フレンド」概念をシミュレートできます。秘密を確認し、発信者の信頼性を検証します。

以上がJava はパッケージ間アクセスに関して C の「フレンド」概念を模倣できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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