Maison  >  Article  >  Java  >  Java peut-il imiter le concept « Friend » de C pour l'accès entre packages ?

Java peut-il imiter le concept « Friend » de C pour l'accès entre packages ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-08 07:23:02734parcourir

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

Réplication du concept « ami » C en Java

Dans la programmation orientée objet, le concept « ami » permet aux classes de différents packages de accéder aux méthodes non publiques de chacun. En C , cette fonctionnalité est obtenue grâce au mot-clé 'friend'.

Défi :

En Java, il n'y a pas d'équivalent direct au concept 'friend'. Les programmeurs Java peuvent-ils reproduire cette fonctionnalité pour permettre l'accès entre packages à des méthodes non publiques ?

Solution :

Bien que Java n'ait pas d'« ami » intégré fonctionnalité, une technique intelligente peut être utilisée pour obtenir un comportement similaire.

Sécurité des signatures avec classes imbriquées :

Créez des classes imbriquées au sein de chaque classe cible représentant un secret partagé ou ' signature.' Ces classes ont un accès restreint à leurs constructeurs, garantissant que seules les instances autorisées peuvent être créées.

Exemple :

Considérons deux classes, Roméo et Juliette, provenant de packages différents. Pour permettre à Roméo d'accéder aux méthodes non publiques de Juliette, Juliette déclare une classe imbriquée TrueLove avec un constructeur privé.

// 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
    }
}

Restriction de l'accès à la signature :

Romeo définit sa propre proposition de classe imbriquée avec un constructeur public. Cependant, il contient également une référence statique à la classe TrueLove de Juliet, fournissant un accès contrôlé à la signature.

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

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

Vérification et sécurité :

Quand Roméo appelle cuddleJuliet( ), il passe une instance de Proposal.love, vérifiant son autorisation d'accéder aux méthodes non publiques de Juliet. Si une autre classe tente d'accéder directement à TrueLove, elle échouera à cause du constructeur privé, garantissant la sécurité.

Cette technique permet aux programmeurs Java de simuler le concept "ami" C en utilisant des classes imbriquées pour restreindre l'accès aux fichiers partagés. secrets et vérifier l'authenticité des appelants.

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:
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