Maison > Java > javaDidacticiel > le corps du texte

Java Reflection peut-il contourner l'encapsulation pour accéder aux champs privés ?

Susan Sarandon
Libérer: 2024-11-01 20:11:29
original
248 Les gens l'ont consulté

Can Java Reflection Bypass Encapsulation to Access Private Fields?

Champs privés accessibles via la réflexion Java

L'accès aux champs privés via la réflexion est un sujet débattu dans la programmation Java. Avec cette technique, on peut contourner les restrictions d'accès imposées par l'encapsulation et récupérer les valeurs des champs privés, soulevant des inquiétudes quant à la violation des principes d'encapsulation.

Considérons l'exemple suivant :

class Test
{
    private String str;
    public void setStr(String value)
    {
        str = value;
    }
}
Copier après la connexion

La question se pose : Est-il possible d'obtenir la valeur du champ privé 'str' par réflexion ?

Réponse :

Oui, c'est est en effet possible, à condition que les autorisations de sécurité appropriées soient accordées. En utilisant la méthode Field.setAccessible(true), vous pouvez accorder l'accès à un champ privé à partir d'une classe différente.

L'extrait de code suivant montre comment y parvenir :

import java.lang.reflect.*;

class Other
{
    private String str;
    public void setStr(String value)
    {
        str = value;
    }
}

class Test
{
    public static void main(String[] args)
        // Just for the ease of a throwaway test. Don't
        // do this normally!
        throws Exception
    {
        Other t = new Other();
        t.setStr("hi");
        Field field = Other.class.getDeclaredField("str");
        field.setAccessible(true);
        Object value = field.get(t);
        System.out.println(value);
    }
}
Copier après la connexion

Attention :

Il est fortement déconseillé d'accéder aux champs privés dans des scénarios typiques. Ce faisant, vous ignorez les mécanismes d'encapsulation de la classe, annulant potentiellement les contrôles de validation essentiels ou modifiant d'autres champs de manière inattendue.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!