Maison  >  Article  >  Java  >  Java Reflection peut-il accéder aux champs privés ?

Java Reflection peut-il accéder aux champs privés ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-28 06:02:02525parcourir

Can Java Reflection Access Private Fields?

Accès aux champs privés via la réflexion en Java

Question : Le mécanisme de réflexion de Java peut-il être utilisé pour accéder aux champs privés, comme le champ str dans l'extrait de code suivant ?

<code class="java">public class Test {

   private String str;
   public void setStr(String value) { str = value; }
}</code>

Réponse : Oui, il est possible d'accéder aux champs privés via la réflexion. Cependant, les autorisations de sécurité doivent être accordées et setAccessible(true) doit être utilisé lors de l'accès au champ à partir d'une classe différente.

Considérez l'exemple suivant :

<code class="java">import java.lang.reflect.*;

public class Other {

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

public class Test {

    public static void main(String[] args) 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);
    }
}</code>

Remarque : Cette pratique est généralement déconseillée car elle viole les principes d'encapsulation définis par l'auteur de la classe originale. Les contrôles de validation ou les dépendances sur d'autres champs peuvent être contournés, entraînant un comportement imprévisible.

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