Maison > Java > javaDidacticiel > Comment puis-je obtenir un accès limité aux méthodes privées en Java sans utiliser le concept « ami » ?

Comment puis-je obtenir un accès limité aux méthodes privées en Java sans utiliser le concept « ami » ?

Patricia Arquette
Libérer: 2024-11-12 11:50:02
original
620 Les gens l'ont consulté

How Can I Achieve Limited Access to Private Methods in Java Without Using the

Fournir un accès limité aux méthodes privées en Java

En Java, il n'est pas directement possible de reproduire le concept "ami" C, qui permet accès aux membres privés d’une classe à des entités externes. Cependant, un comportement similaire peut être obtenu en utilisant des techniques alternatives.

L'approche de la signature d'amour

Une approche intelligente pour obtenir un accès contrôlé consiste à utiliser une signature « secrète ». Voici comment cela fonctionne :

  1. Créez une classe publique dans un package qui représente la "signature secrète" requise pour accéder aux méthodes privées dans un autre package. Cette classe de signature peut contenir un constructeur privé pour garantir l'exclusivité.
  2. Dans la classe ayant besoin d'accéder aux membres privés, définissez des méthodes publiques qui acceptent les instances de la classe de signature comme paramètres.
  3. Lors de l'appel de la classe de signature méthodes publiques de l'autre paquet, l'instance de classe de signature agit comme une "preuve" pour permettre au invocation.

Exemple :

Considérons deux classes, Roméo et Juliette, provenant de packages différents. Roméo doit accéder aux méthodes privées dans Juliet sans en faire une sous-classe.

Code de Juliette :

// Capulet package
public class Juliet {

    public static void cuddle(Romeo.Love love) {
        Objects.requireNonNull(love);
        // Juliet's private methods can be accessed here.
    }
    
}
Copier après la connexion

Romeo.Love est une classe publique avec un constructeur privé, garantissant que seul Roméo peut créer une instance.

Romeo's Code :

// Montague package
public class Romeo {

    public static final class Love { private Love() {} }
    private static final Love love = new Love();

    public static void cuddleJuliet() {
        Juliet.cuddle(love);
    }
}
Copier après la connexion

Cette approche exploite l'exclusivité du constructeur de classe de signature pour accorder un accès sélectif aux méthodes souhaitées tout en préservant l'encapsulation et la confidentialité.

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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal