Est-il possible en Java pour accéder domaine privé str via la réflexion? Par exemple, pour obtenir la valeur de ce champ.
class Test
{
private String str;
public void setStr(String value)
{
str = value;
}
}
Est-il possible en Java pour accéder domaine privé str via la réflexion? Par exemple, pour obtenir la valeur de ce champ.
class Test
{
private String str;
public void setStr(String value)
{
str = value;
}
}
Oui, il est absolument - en supposant que vous avez les autorisations de sécurité appropriés. Utiliser Field.setAccessible(true)
d'abord si vous avez accès à partir d'une autre classe.
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);
}
}
Et non, vous ne devriez pas l'habitude de faire...
Oui.
Field f = Test.class.getDeclaredField("str");
f.setAccessible(true);//Very important, this allows the setting to work.
String value = (String) f.get(object);
ensuite, vous utilisez le champ de l'objet pour obtenir la valeur sur une instance de la classe.
Notez que la méthode get est souvent de la confusion pour les gens. Vous avez le champ, mais vous n'avez pas une instance de l'objet. Vous devez passer que pour la méthode get
Oui c'est possible.
Vous devez utiliser le getDeclaredField méthode (au lieu de la méthode getField), avec le nom de votre domaine privé:
Field privateField = Test.class.getDeclaredField("str");
En outre, vous avez besoin de définir ce Champ pour être accessible, si vous souhaitez accéder à un champ privé:
privateField.setAccessible(true);
Une fois cela fait, vous pouvez utiliser la méthode get sur le Champ exemple, pour accéder à la valeur de la str champ.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.