Ho una classe e voglio trovare tutte le variabili pubbliche (non funzioni). come posso farlo? grazie!java: richiama tutti i nomi delle variabili in una classe
risposta
Field[] fields = YourClassName.class.getFields();
restituisce una matrice di tutte le variabili pubbliche della classe.
getFields()
restituire i campi nell'intera classe-heirarcy. Se si desidera avere i campi definiti soltanto nella classe in questione, e non le sue superclassi, utilizzare getDeclaredFields()
, e filtrare i public
quelli con il seguente Modifier
approccio:
Modifier.isPublic(field.getModifiers());
Il YourClassName.class
letterale in realtà rappresenta un oggetto di tipo java.lang.Class
. Controlla i suoi documenti per metodi di riflessione più interessanti.
La classe sopra Field
è java.lang.reflect.Field
. Puoi dare un'occhiata all'intero pacchetto java.lang.reflect
.
solo una nota: inizialmente la mia risposta conteneva un'affermazione errata, tuttavia è stata sovralimentata un numero di volte. Si prega di leggere più attentamente;) – Bozho
@downvoter - l'errore era prima. Se ne vedi uno adesso, per favore condividi. – Bozho
questa soluzione è lenta? o possiamo usarlo liberamente? –
https://docs.oracle.com/javase/tutorial/reflect/class/classMembers.html. Ha anche grafici per la localizzazione di metodi e costruttori.
Come menzionato da pochi utenti, sotto il codice può aiutare a trovare tutti i campi di una determinata classe.
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 di seguito:
Con l'aiuto di Jackson biblioteca, sono stato in grado di trovare tutte le proprietà di classe di tipo stringa/integer/doppia, e rispettivi valori in una classe Map. (senza utilizzare riflessi api!)
TestClass testObject = new TestClass();
com.fasterxml.jackson.databind.ObjectMapper m = new com.fasterxml.jackson.databind.ObjectMapper();
Map<String,Object> props = m.convertValue(testObject, Map.class);
for(Map.Entry<String, Object> entry : props.entrySet()){
if(entry.getValue() instanceof String || entry.getValue() instanceof Integer || entry.getValue() instanceof Double){
System.out.println(entry.getKey() + "-->" + entry.getValue());
}
}
È possibile utilizzare uno dei due in base alle proprie 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 dalla lista di cui sopra (sulla base del requisito) utilizzare il codice qui sotto:
List<Field> fieldList = Arrays.asList(fields).stream().filter(field -> Modifier.isPublic(field.getModifiers())).collect(
Collectors.toList());
- 1. JQuery - richiama tutti i nomi di file dentro input = 'file'
- 2. Ottenere i nomi delle variabili con JavaScript
- 3. Evitare di sovrascrivere i nomi delle variabili
- 4. C++ richiama i nomi storti di una funzione/metodo
- 5. IntelliJ sostituisce i nomi delle variabili su più righe
- 6. Symfony2 - Come accedere i nomi delle variabili dinamiche in ramoscello
- 7. richiama tutti i campi da DynamicForm
- 8. Come ottenere tutti i nomi delle classi in un pacchetto?
- 9. Come ottenere i nomi delle variabili nominate dalla stringa python
- 10. Uglify-js non altera i nomi delle variabili
- 11. Cambiare i nomi delle variabili con Python per cicli
- 12. Usi articoli nei nomi delle variabili?
- 13. È possibile riutilizzare i nomi delle variabili con l'uso dello spazio dei nomi?
- 14. Come ottenere tutti i nomi di classe in uno spazio dei nomi in Ruby?
- 15. PHP: richiama tutti i nomi dei metodi da un oggetto con nome "bla_"
- 16. Ottieni i nomi delle colonne
- 17. Utilizzo delle variabili scope dell'applicazione in java
- 18. PHP: richiama tutti gli spazi dei nomi dichiarati di una DOMElement
- 19. Analisi di una stringa shader GLSL per trovare i nomi delle variabili nell'NDK Android
- 20. Stampa tutti i nomi dei metodi di una classe in Ruby?
- 21. Indirizzo di memoria delle variabili in Java
- 22. Elenco di tutti i nomi bit di una bandiera Enum
- 23. Perché tutti i metodi/variabili statici in una classe non statica?
- 24. in php c'è un modo per scaricare "tutti" i nomi delle variabili con il loro valore corrispondente?
- 25. Buone pratiche per disambiguare i nomi degli argomenti rispetto ai nomi delle variabili di istanza in Objective-C
- 26. come mantenere tutti i metodi in una classe con ProGuard
- 27. Valore predefinito Java delle variabili di istanza di una classe non inizializzata a zero per int
- 28. C# - Come elencare i nomi e i valori delle variabili pubblicati nella pagina ASPX
- 29. copia tutti i nomi dei metodi - Intellij
- 30. Ridefinizione delle variabili di istanza di una classe Smalltalk
si dovrebbe essere in grado di farlo usando [API Reflection] (http://java.sun.com/docs/books/tutorial/reflect/). – Crozin