java: ottieni tutti i nomi delle variabili in una class

Ho una lezione e voglio trovare tutte le variabili pubbliche (non funzioni). come posso farlo? Grazie!

Field[] fields = YourClassName.class.getFields(); 

restituisce una matrice di tutte le variabili pubbliche della class.

getFields() restituisce i campi nell’intera class-heirarcy. Se vuoi che i campi siano definiti solo nella class in questione, e non nelle sue superclassi, usa getDeclaredFields() e filtra quelli public con il seguente approccio Modifier :

 Modifier.isPublic(field.getModifiers()); 

Il letterale YourClassName.class rappresenta in realtà un object di tipo java.lang.Class . Controlla i suoi documenti per metodi di riflessione più interessanti.

La class Field sopra è java.lang.reflect.Field . Puoi dare un’occhiata all’intero pacchetto java.lang.reflect .

https://docs.oracle.com/javase/tutorial/reflect/class/classMembers.html . Ha anche grafici per la localizzazione di metodi e costruttori.

inserisci la descrizione dell'immagine qui

Puoi utilizzare uno dei due in base alle tue esigenze:

 Field[] fields = ClassName.class.getFields(); // returns inherited members but not private members. Field[] fields = ClassName.class.getDeclaredFields(); // returns all members including private members but not inherited members. 

Per filtrare solo i campi pubblici dall’elenco precedente (in base al requisito) utilizzare sotto il codice:

 List fieldList = Arrays.asList(fields).stream().filter(field -> Modifier.isPublic(field.getModifiers())).collect( Collectors.toList()); 

Come citato da pochi utenti, il codice sottostante può aiutare a trovare tutti i campi in una determinata class.

 TestClass testObject= new TestClass().getClass(); Method[] methods = testObject.getMethods(); for (Method method:methods) { String name=method.getName(); if(name.startsWith("get")) { System.out.println(name.substring(3)); }else if(name.startsWith("is")) { System.out.println(name.substring(2)); } } 

Tuttavia un approccio più interessante è qui sotto:

Con l’aiuto della libreria di Jackson, sono stato in grado di trovare tutte le proprietà di class di tipo String / intero / doppio e rispettivi valori in una class Map. ( senza usare le riflessioni api! )

 TestClass testObject = new TestClass(); com.fasterxml.jackson.databind.ObjectMapper m = new com.fasterxml.jackson.databind.ObjectMapper(); Map props = m.convertValue(testObject, Map.class); for(Map.Entry entry : props.entrySet()){ if(entry.getValue() instanceof String || entry.getValue() instanceof Integer || entry.getValue() instanceof Double){ System.out.println(entry.getKey() + "-->" + entry.getValue()); } }