J'ai une classe et je veux trouver toutes ses variables publiques (pas de fonctions). comment puis-je le faire? merci!java: obtient tous les noms de variables dans une classe
Répondre
Field[] fields = YourClassName.class.getFields();
renvoie un tableau de toutes les variables publiques de la classe.
getFields()
Retourne les champs dans l'ensemble de la classe-héritabilité. Si vous voulez avoir les champs définis que dans la classe en question, et non ses superclasses, utilisez getDeclaredFields()
et filtrer les public
ceux avec l'approche Modifier
suivante:
Modifier.isPublic(field.getModifiers());
Le YourClassName.class
littéral représente en fait un objet de type java.lang.Class
. Consultez ses documents pour des méthodes de réflexion plus intéressantes. La classe Field
ci-dessus est java.lang.reflect.Field
. Vous pouvez jeter un oeil à l'ensemble java.lang.reflect
package.
juste une note - initialement ma réponse contenait une fausse déclaration, mais il a été upvoted un certain nombre de fois. S'il vous plaît lire plus attentivement;) – Bozho
@downvoter - l'erreur était avant. Si vous en voyez un maintenant, partagez s'il vous plaît. – Bozho
cette solution est lente? ou pouvons-nous l'utiliser librement? –
https://docs.oracle.com/javase/tutorial/reflect/class/classMembers.html. A également des graphiques pour localiser des méthodes et des constructeurs.
Comme mentionné par quelques utilisateurs, le code ci-dessous peut aider à trouver tous les champs dans une classe donnée.
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));
}
}
Cependant, une approche plus intéressante est ci-dessous:
Avec l'aide de la bibliothèque Jackson, j'ai pu trouver toutes les propriétés de classe de type String/entier/double, et les valeurs respectives dans une classe de la carte. (sans utiliser des reflets 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());
}
}
Vous pouvez utiliser l'un des deux en fonction de votre besoin:
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.
Pour filtrer uniquement les champs publics de la liste ci-dessus (en fonction des besoins) ci-dessous utilisent le code:
List<Field> fieldList = Arrays.asList(fields).stream().filter(field -> Modifier.isPublic(field.getModifiers())).collect(
Collectors.toList());
- 1. Noms de variables Java Unicode
- 2. Trouver tous les noms de classe dans un projet WPF
- 3. Comment lister tous les noms de classe dans le package actuel avec Java?
- 4. Comment obtenir tous les noms de classe dans un espace de noms dans Ruby?
- 5. Java Accès aux noms de variables locales
- 6. Doctrine - Récupérer la liste des champs dans la sous-classe obtient tous les champs dans l'ensemble
- 7. Wpf: Liste tous les noms de contrôle dans une application
- 8. Remplir une zone de liste avec les noms des variables de LINQ généré classe
- 9. C question # style, cteur noms de variables et les noms de propriétés de classe
- 10. Nom de la classe de variables Java
- 11. Trouver tous les mots clés du langage Java et les noms des classes API java
- 12. java beginner: initialisation des variables de classe
- 13. Comment le débogueur Eclipse obtient-il les informations sur les variables privées à l'intérieur de la classe?
- 14. Comment trouver tous les noms de classe de dépendance d'une classe?
- 15. Php question: Imprimer les noms de variables
- 16. Les variables python n'acceptent pas les noms
- 17. Obtention d'une liste de tous les chargeurs de classe dans une machine virtuelle Java
- 18. SharpSVN lire TOUS les noms de fichiers
- 19. Variables abstraites en Java?
- 20. vecteur de noms de variables dans R
- 21. importer toutes les variables de classe parente
- 22. Variables globales dans Java
- 23. Looping noms de variables dans fortran 90
- 24. Java - Classe abstraite pour contenir des variables?
- 25. liste tous les noms de colonnes
- 26. Jquery obtient le html d'une classe spécifique dans une table
- 27. Java Obtient plusieurs éléments de la collection
- 28. Puis-je échapper des caractères dans les noms de variables?
- 29. Utilisez les arguments comme noms de variables dans l'objectif-c
- 30. Lire les variables Java
Vous devriez être en mesure de le faire en utilisant [API de réflexion] (http://java.sun.com/docs/books/tutorial/reflect/). – Crozin