Maison >Java >javaDidacticiel >Java Reflection peut-il accéder aux champs privés ?
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!