Maison  >  Article  >  Java  >  Java peut-il reproduire le concept C « Friend » ?

Java peut-il reproduire le concept C « Friend » ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-10 05:07:02534parcourir

Can Java Replicate the C   'Friend' Concept?

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!

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