"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 » ?

Publié le 2024-11-10
Parcourir:471

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érez deux classes, Roméo et Juliette, provenant de packages différents. Roméo doit accéder aux méthodes privées de 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.
    }
    
}

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

Code de Romeo :

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

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é.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3