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