7 votes

Puis-je accéder aux variables statiques de l'objet "classe" ?

Disposer de cette méthode :

readAllTypes(Class clazz) {...}

Puis-je accéder aux variables statiques de la classe ?

10voto

Jon Skeet Points 692016

Oui. Il suffit d'utiliser Class.getDeclaredFields() (ou Class.getDeclaredField(String) ) comme d'habitude, et pour obtenir les valeurs, utilisez la commande Field.getXyz() en passant par les méthodes null pour les obj paramètre.

Exemple de code :

import java.lang.reflect.Field;

class Foo {
    public static int bar;
}

class Test {
    public static void main(String[] args)
        throws IllegalAccessException, NoSuchFieldException {

        Field field = Foo.class.getDeclaredField("bar");
        System.out.println(field.getInt(null)); // 0
        Foo.bar = 10;
        System.out.println(field.getInt(null)); // 10
    }
}

1voto

user Points 6733

Vous pouvez trouver le champ en utilisant [clazz.getDeclaredFields()](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Class.html#getDeclaredFields()) qui renvoie un Field[] ou en obtenant directement le champ par son nom, avec clazz.getDeclaredField("myFieldName") . Cela peut provoquer un NoSuchFieldException .

Une fois que vous avez fait cela, vous pouvez obtenir la valeur du champ avec field.get(null) si le champ représente un objet, ou avec field.getInt(null) , field.getDouble(null) etc. s'il s'agit d'une primitive. Pour vérifier le type du champ, utilisez la fonction getType o getGenericType . Ceux-ci peuvent déclencher un IllegalAccessException s'ils ne sont pas publics, auquel cas vous pouvez utiliser field.setAccessible(true) d'abord. Vous pouvez également définir les champs de la même manière en remplaçant simplement "get" par "set".

Prograide.com

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.

Powered by:

X