Bonjour, depuis un moment je cherchais à afficher l'état d'un objet en affichant la liste de ses champs et leur valeur en surchargeant la méthode toString() (ou en utilisant un autre nom de méthode).
Je me suis penché sur le problème aujourd'hui, et j'en suis arrivé au code suivant. Je suis dans le cas où j'utilise des objets qui héritent d'une classe mère qui contient, elle, les attributs intéressants.
SI vous avez des suggestions pour améliorer ce code et le rendre encore plus générique (par exemple en allant chercher les attributs de l'objet courant si besoin, ou d'objet de classes supérieures), c'est pas de refus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 @Override public String toString() { String thisName = this.getClass().getSuperclass().getName(); String objectName = thisName.substring(thisName.lastIndexOf("."), thisName.length()); StringBuffer buf = new StringBuffer(); buf.append("--- Object " + objectName + " Begin ----\n"); Field[] fields = this.getClass().getSuperclass().getDeclaredFields(); for (int index = 0; index < fields.length; index++) { Field field = fields[index]; String value = null; try { Object obj = field.get(this); if (obj != null) value = (String) obj.toString(); else value = null; } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } if (value != null) buf.append(field.getName() + ": " + value.toString() + "\n"); else buf.append(field.getName() + ": NULL\n"); } buf.append("--- Object " + objectName + " End ----\n"); return buf.toString(); }
En tout cas, cette portion de code est là pour ceux à qui elle conviendrait. Une fois le code optimisé, il pourrait être intéressant de l'ajouter à la FAQ ?
Existe-t-il une méthode plus simple pour en arriver au même résultat ?
Partager