Maison > Java > javaDidacticiel > Java peut-il imiter le concept « ami » de C ?

Java peut-il imiter le concept « ami » de C ?

Susan Sarandon
Libérer: 2024-11-08 08:42:01
original
479 Les gens l'ont consulté

Can Java Mimic C  's

Java peut-il émuler le concept « ami » de C ?

En C, le concept « ami » permet aux classes de différents packages d'accéder méthodes privées et protégées des autres classes. En Java, il n’existe pas d’équivalent direct à cette fonctionnalité. Cependant, une solution de contournement intelligente peut simuler le concept « ami ».

Comment simuler « ami » en Java

La clé de cette solution de contournement consiste à utiliser un niveau de classe identifiant secret. Imaginons que nous ayons deux classes de packages différents : Roméo et Juliette. Roméo souhaite accéder aux méthodes non publiques de Juliet sans étendre sa classe.

Dans le package de Roméo :

public class Romeo {
    public static final class LoveIdentifier {
        private LoveIdentifier() {}
    }
    private static final LoveIdentifier loveIdentifier = new LoveIdentifier();
    
    public void cuddleJuliet(Juliet.LoveIdentifier loveIdentifier) {
        // ...
    }
}
Copier après la connexion

Roméo définit une classe statique imbriquée LoveIdentifier avec un constructeur privé. Cette classe sert d'identifiant secret qui permet à Roméo d'accéder aux méthodes privées de Juliet.

Dans le package de 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
    }
}
Copier après la connexion

Juliet définit également une classe LoveIdentifier identique pour correspondre à celle de Roméo. Lorsque la méthode beCuddled de Juliet est appelée, elle vérifie si le LoveIdentifier transmis correspond au sien. Si c'est le cas, il accorde à Roméo l'accès à ses méthodes privées.

À l'aide de la simulation « Ami »

Désormais, Roméo peut interagir avec Juliette en fournissant le LoveIdentifier partagé comme un argument :

Romeo romeo = new Romeo();
Juliet juliet = new Juliet();
romeo.cuddleJuliet(juliet.loveIdentifier);
Copier après la connexion

Puisque Roméo transmet le bon LoveIdentifier, il peut accéder aux méthodes privées de Juliette, simulant efficacement la relation « ami » de C.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal