Maison >Java >javaDidacticiel >Java Reflection peut-il être utilisé pour accéder à des champs privés ?

Java Reflection peut-il être utilisé pour accéder à des champs privés ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-31 07:00:17555parcourir

Can Java Reflection Be Used to Access Private Fields?

Accès aux champs privés avec Java Reflection

Question : Les champs privés en Java sont-ils accessibles via la réflexion ?

Réponse : Oui, il est possible d'accéder aux champs privés avec la réflexion Java. Cependant, il est important de noter que cela nécessite des autorisations particulières.

Pour accéder à un champ privé d'une classe différente, la méthode setAccessible(true) de la classe Field peut être utilisée. Par exemple, considérons le code suivant :

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

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

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>

Ce code accède avec succès au champ privé str et imprime sa valeur. Cependant, il est crucial de faire preuve de prudence lorsque l’on utilise la réflexion pour accéder à des champs privés. Cela compromet l'encapsulation prévue par le concepteur de la classe. Cela pourrait entraîner l'omission des contrôles de validation ou d'autres interactions inattendues.

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