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

Susan Sarandon
リリース: 2024-11-08 08:42:01
オリジナル
365 人が閲覧しました

Can Java Mimic C  's

Java は C の 'フレンド' 概念をエミュレートできますか?

C では、'フレンド' 概念により、さまざまなパッケージのクラスがアクセスできるようになります。他のクラスのプライベートメソッドと保護されたメソッド。 Java には、この機能に直接相当する機能はありません。ただし、賢い回避策を使用すると、「フレンド」の概念をシミュレートできます。

Java で「フレンド」をシミュレートする方法

この回避策の鍵は、クラスレベルの秘密の識別子。異なるパッケージからの 2 つのクラス、ロミオとジュリエットがあると想像してみましょう。 Romeo は、クラスを拡張せずに Juliet の非パブリック メソッドにアクセスしたいと考えています。

Romeo のパッケージ内:

public class Romeo {
    public static final class LoveIdentifier {
        private LoveIdentifier() {}
    }
    private static final LoveIdentifier loveIdentifier = new LoveIdentifier();
    
    public void cuddleJuliet(Juliet.LoveIdentifier loveIdentifier) {
        // ...
    }
}
ログイン後にコピー

Romeo は、プライベート コンストラクターを使用してネストされた静的クラス LoveIdentifier を定義します。このクラスは、Romeo が Juliet のプライベート メソッドにアクセスできるようにする秘密識別子として機能します。

Juliet のパッケージ内:

public class Juliet {
    public static final class LoveIdentifier {
        private LoveIdentifier() {}
    }
    private static final LoveIdentifier loveIdentifier = new LoveIdentifier();
    
    public void beCuddled(Romeo.LoveIdentifier loveIdentifier) {
        // Allow Romeo to access private methods using the identifier
    }
}
ログイン後にコピー

Juliet は、Romeo のものと一致する同一の LoveIdentifier クラスも定義します。 Juliet の beCuddled メソッドが呼び出されると、渡された LoveIdentifier が彼女のものと一致するかどうかがチェックされます。許可されている場合、ロミオにそのプライベート メソッドへのアクセスが許可されます。

「友達」シミュレーションの使用

これで、ロミオは共有 LoveIdentifier を次のように提供することでジュリエットと対話できるようになります。引数:

Romeo romeo = new Romeo();
Juliet juliet = new Juliet();
romeo.cuddleJuliet(juliet.loveIdentifier);
ログイン後にコピー

ロミオは正しい LoveIdentifier を渡しているため、ジュリエットのプライベート メソッドにアクセスでき、C の「友達」関係を効果的にシミュレートできます。

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

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