Pouvez-vous répliquer le concept C 'Friend' en Java ?
En Java, il n'est généralement pas possible d'avoir une classe dans un seul package pour accéder aux membres non publics d’une classe dans un autre package. Cependant, il existe une astuce qui peut être utilisée pour simuler ce comportement.
L'astuce
L'astuce consiste à utiliser une classe imbriquée avec un constructeur privé. Cette classe imbriquée agit comme une « sécurité de signature » pour la méthode à laquelle vous souhaitez restreindre l'accès. Voici un exemple :
// Package: capulet public class Juliet { public static void cuddle(Romeo.Love love) { // Check that the love is real (null check) Objects.requireNonNull(love); // Call the cuddle method System.out.println("O Romeo, Romeo, wherefore art thou Romeo?"); } }
// Package: montague public class Romeo { // Nested class with private constructor public static final class Love { private Love() {} } // Static reference to the love class private static final Love love = new Love(); // Public method to cuddle Juliet using the nested class public static void cuddleJuliet() { Juliet.cuddle(love); } }
Dans cet exemple, la classe Romeo.Love est imbriquée dans la classe Romeo et possède un constructeur privé. Cela signifie qu'aucune autre classe ne peut construire une instance de Romeo.Love. La classe Juliet a une méthode publique appelée cuddle qui prend une instance de Romeo.Love comme paramètre.
Puisque seule la classe Romeo peut créer des instances de Romeo.Love, seule la classe Romeo peut appeler la méthode cuddle. Cela restreint effectivement l'accès à la méthode cuddle à la classe Romeo, simulant le comportement du concept C-friend.
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!