Maison  >  Article  >  Java  >  Comment pouvez-vous simuler le concept « ami » de C en Java ?

Comment pouvez-vous simuler le concept « ami » de C en Java ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-11 05:48:03361parcourir

How Can You Simulate C  's 'friend' Concept in Java?

Simuler le concept "ami" C en Java

Java n'offre pas de concept "ami" explicite comme on le voit en C qui autorise les classes à partir de différents forfaits pour accéder aux membres non publics. Cependant, une technique intelligente peut être utilisée pour reproduire ce comportement.

Réplication de "ami" C en Java

Considérons deux classes, Roméo et Juliette, dans des packages séparés. Juliette veut restreindre l'accès à ses méthodes à Roméo. En C , cela pourrait être obtenu en déclarant Roméo comme « ami » de Juliette.

En Java, un effet similaire peut être obtenu grâce à l'utilisation d'un constructeur privé et d'une référence statique.

  1. La méthode des câlins de Juliette devient publique mais nécessite un Roméo.Amour argument :
public static void cuddle(Romeo.Love love) {
    if (love == null) throw new NullPointerException();
    System.out.println("O Romeo, Romeo, wherefore art thou Romeo?");
}
  1. Roméo définit une classe imbriquée statique publique Love avec un constructeur privé :
public static final class Love { private Love() {} }

Seul Roméo peut construire un Romeo.Love exemple. Roméo crée ensuite une référence Romeo.Love finale statique :

private static final Love love = new Love();
  1. Méthode cuddleJuliet de Romeo :
public static void cuddleJuliet() {
    Juliet.cuddle(love);
}

Seul Roméo peut exécuter la méthode cuddle de Juliet car il y a accès à l'instance Romeo.Love. Les autres classes ne peuvent pas instancier Romeo.Love puisque son constructeur est privé.

Cette technique permet à Roméo d'accéder à la méthode câlin de Juliet tout en restreignant l'accès des autres classes, simulant efficacement le concept « ami » en Java, où Juliet ne fait confiance qu'à Roméo. .

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